Wie verschlüssele ich die Zeilen eines zweidimensionalen Arrays in Java? Dies ist ein Problem, auf das viele Entwickler häufig stoßen. Das Mischen der Zeilen eines zweidimensionalen Arrays kann mithilfe der shuffle()-Methode in der Collections-Klasse erreicht werden. Diese Methode kann die Reihenfolge der Elemente in der Sammlung zufällig ändern. Zuerst müssen wir das zweidimensionale Array in eine Listenform konvertieren und dann die shuffle()-Methode verwenden, um die Liste zufällig zu sortieren. Abschließend wird die Zeilenumordnung durch die Rückkonvertierung der Liste in ein zweidimensionales Array abgeschlossen. Diese Methode ist einfach und leicht zu implementieren, kann die Zeilen zweidimensionaler Arrays effektiv verschlüsseln und bietet Entwicklern eine flexiblere Möglichkeit, Daten zu verarbeiten.
Das Problem, das ich habe, ist, dass es die Zeilen und Spalten des 2D-Arrays durcheinander bringt, aber ich weiß nicht, wie ich das beheben kann.
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(); } }Wie Sie sehen, gibt es auch andere Methoden, aber nur diese shuffle2darray()-Methode funktioniert einwandfrei.
Auf diese Weise kann ich die Daten zufällig in 10 aufteilen, sodass ich 10 Kreuzvalidierungen durchführen kann
Ich habe versucht, Druckanweisungen in den Code einzufügen und habe versucht, das 2D-Array vor und nach dem Mischversuch zu überprüfen und dann die CSV-Datei zu überprüfen, um sicherzustellen, dass die Zeilen in der richtigen Reihenfolge waren.
Hier ein kleines Beispiel vor dem Filtern:
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 |
Wenn ich also im Dunkeln herumexperimentiere, sieht es wohl so aus:
int[][] allfeatures = ....;Zum Mischen ist es ein Liner. Sie können den gesamten Code, den Sie besitzen, verschenken:
collections.shuffle(arrays.aslist(allfeatures));Warum funktioniert das?
Weil es so etwas wie ein zweidimensionales Array nicht gibt. Java hat sie überhaupt nicht.
Was du besitzt. int[][] allfeatures
不是二维数组。它是一个一维数组,其组件类型为 int 数组。因此, arrays.aslist(allfeatures)
非常好,因为您有一个对象数组(不是基元) - 每个对象都是一个 int 数组。该表达式的类型为 listdfcfb097077124ccf9617875ee28bb24
Die unterstützten Operationen sind sehr gut. arrays.aslist
返回一个仍然由底层数组支持的列表。因此, .set()
有效,但 .add()
无效(因为数组可以更改其元素,但不能增长或缩小)。 collections.shuffle
可以打乱任何列表,并且仅使用 .set
和 .get
来执行此操作: arrays.aslist
wird. allfeatures
unverändert lassen möchten, klonen Sie bitte zuerst: allfeatures
int[][] clone = allFeatures.clone(); Collections.shuffle(Arrays.asList(clone));
Das obige ist der detaillierte Inhalt vonWie werden Zeilen eines 2D-Arrays in Java gemischt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!