Heim >Java >Wie werden Zeilen eines 2D-Arrays in Java gemischt?

Wie werden Zeilen eines 2D-Arrays in Java gemischt?

PHPz
PHPznach vorne
2024-02-09 16:15:20943Durchsuche

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.

Frageninhalt

Ich habe Code geschrieben, um eine CSV-Datei zu lesen und eine Datenvorverarbeitung durchzuführen. Dann sollten die Zeilen eines 2D-Arrays anstelle der Spalten gemischt werden, obwohl die Reihenfolge nicht geändert werden kann.

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.ensp00000000233cpi_9606.ensp00000000412cpi_9606.ensp00000000442cpi_9606.ensp00000001008cpi_9606.ensp00000001146cpi_9606.ensp00000002165cpi_9606.ensp00000002829cpi_9606.ensp00000003084cpi_9606.ensp0000000310000000000000000000000000000180
Nach dem Filtern und Mischen der Spalten:

cpi_9606.ENSP00000000442cpi_9606.ENSP00000001008cpi_9606.ENSP00000003084cpi_9606.ENSP00000003100cpi_9606.ENSP00000005178cpi_9606.ENSP00000011292cpi_9606.ENSP00000011653cpi_9606.ENSP00000012443cpi_9606.ENSP00000013034cpi_9606.ENSP000000149300900000900000900000009289003383222360000000
Problemumgehung

Ihr Codeausschnitt enthält kein Schlüsselelement: das Array, das Sie sortieren möchten.

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

Das Ergebnis all dessen ist, dass es sich von selbst neu skalieren

wird. allfeatures

Wenn Sie

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen