Comment brouiller les lignes d'un tableau bidimensionnel en Java ? C’est un problème que de nombreux développeurs rencontrent souvent. Le brassage des lignes d'un tableau à deux dimensions peut être réalisé en utilisant la méthode shuffle() dans la classe Collections. Cette méthode peut modifier aléatoirement l’ordre des éléments de la collection. Tout d’abord, nous devons convertir le tableau bidimensionnel sous forme de liste, puis utiliser la méthode shuffle() pour trier aléatoirement la liste. Enfin, la reconversion de la liste en un tableau à deux dimensions termine le brassage des lignes. Cette méthode est simple et facile à mettre en œuvre, peut brouiller efficacement les lignes de tableaux bidimensionnels et offre aux développeurs un moyen plus flexible de traiter les données.
Le problème que j'ai est qu'il brouille les lignes et les colonnes du tableau 2D, mais je ne sais pas comment y remédier.
import java.io.*; import java.nio.file.paths; import java.util.*; public class randomforest { public static void shuffle2darray() { int numrows = allfeatures.length; list<integer> indices = new arraylist<>(); // populate the list with indices for (int i = 0; i < numrows; i++) { indices.add(i); } // shuffle the list of indices collections.shuffle(indices); // create a copy of the original array int[][] shuffledarray = new int[numrows][allfeatures[0].length]; // use shuffled indices to rearrange the rows of the original array for (int i = 0; i < numrows; i++) { shuffledarray[i] = allfeatures[indices.get(i)]; } // update the original array with the shuffled values allfeatures = shuffledarray; } public static void main(string[] args) throws ioexception { randomforest rf = new randomforest("se-dermatitis dataset.csv"); rf.getdatarows(); rf.markfilters(); rf.removeattributes(); int count = 1; int counter = 1; int totalpredacc = 0; int allfeaturessize = allfeatures.length; int foldsize = allfeaturessize / 10; double[] threshold = {0.4, 0.5, 0.6, 0.7}; shuffle2darray(); } }
De cette façon, je peux diviser aléatoirement les données en 10 afin de pouvoir effectuer 10 validations croisées
J'ai essayé de mettre des instructions d'impression dans le code et j'ai essayé de vérifier le tableau 2D avant et après avoir essayé de mélanger, puis de vérifier le fichier csv pour m'assurer que les lignes étaient dans le bon ordre.
Voici un petit exemple avant filtrage :
cpi_9606.ensp00000000412 | cpi_9606.ensp00000000442 | cpi_9606.ensp00000001008 | cpi_9606.ensp00000001146 | cpi_9606.ensp00000002165 | cpi_9606.ensp00000002829 | cpi_9606.ensp00000003084 | cpi_9606.ensp00000003100 | |
---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 180 |
cpi_9606.ENSP00000001008 | cpi_9606.ENSP00000003084 | cpi_9606.ENSP00000003100 | cpi_9606.ENSP00000005178 | cpi_9606.ENSP00000011292 | cpi_9606.ENSP00000011653 | cpi_9606.ENSP00000012443 | cpi_9606.ENSP00000013034 | cpi_9606.ENSP00000014930 | |
---|---|---|---|---|---|---|---|---|---|
900 | 0 | 0 | 0 | 900 | 0 | 0 | 0 | ||
0 | 0 | 0 | 0 | 0 | 928 | 900 | 338 | ||
236 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Donc, en s'amusant dans le noir, je suppose que ça ressemble à ceci :
int[][] allfeatures = ....;
collections.shuffle(arrays.aslist(allfeatures));
Parce qu’il n’existe pas de tableau bidimensionnel. Java ne les a pas du tout.
Ce que vous possédez. int[][] allfeatures
不是二维数组。它是一个一维数组,其组件类型为 int 数组。因此, arrays.aslist(allfeatures)
非常好,因为您有一个对象数组(不是基元) - 每个对象都是一个 int 数组。该表达式的类型为 list<int[]>
Les opérations prises en charge sont très bonnes. arrays.aslist
返回一个仍然由底层数组支持的列表。因此, .set()
有效,但 .add()
无效(因为数组可以更改其元素,但不能增长或缩小)。 collections.shuffle
可以打乱任何列表,并且仅使用 .set
和 .get
来执行此操作: arrays.aslist
tout seul. allfeatures
inchangé, veuillez d'abord cloner : allfeatures
int[][] clone = allFeatures.clone(); Collections.shuffle(Arrays.asList(clone));
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!