Bagaimana untuk mengacak baris tatasusunan dua dimensi di Jawa? Ini adalah masalah yang sering dihadapi oleh banyak pembangun. Mengocok baris tatasusunan dua dimensi boleh dicapai dengan menggunakan kaedah shuffle() dalam kelas Koleksi. Kaedah ini boleh merombak susunan unsur dalam koleksi secara rawak. Mula-mula, kita perlu menukar tatasusunan dua dimensi ke dalam bentuk Senarai, dan kemudian gunakan kaedah shuffle() untuk mengisih senarai secara rawak. Akhir sekali, menukar senarai kembali kepada tatasusunan dua dimensi melengkapkan rombakan baris. Kaedah ini mudah dan mudah untuk dilaksanakan, boleh mengacak baris tatasusunan dua dimensi dengan berkesan dan menyediakan pembangun cara yang lebih fleksibel untuk memproses data.
Masalah yang saya hadapi ialah ia mengacau baris dan lajur tatasusunan 2d, tetapi saya tidak tahu bagaimana untuk membetulkannya.
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(); } }
Dengan cara ini saya boleh membahagikan data secara rawak kepada 10 supaya saya boleh melakukan 10 pengesahan silang
Saya telah cuba meletakkan penyata cetakan ke dalam kod dan cuba menyemak tatasusunan 2d sebelum dan selepas cuba mengocok, dan kemudian menyemak fail csv untuk memastikan baris berada dalam susunan yang betul.
Berikut adalah contoh kecil sebelum menapis:
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 |
Jadi, setelah mencubanya dalam gelap, saya rasa ia kelihatan seperti ini:
int[][] allfeatures = ....;
collections.shuffle(arrays.aslist(allfeatures));
Sebab tiada tatasusunan dua dimensi. java tidak mempunyai mereka sama sekali.
Apa yang anda miliki. int[][] allfeatures
不是二维数组。它是一个一维数组,其组件类型为 int 数组。因此, arrays.aslist(allfeatures)
非常好,因为您有一个对象数组(不是基元) - 每个对象都是一个 int 数组。该表达式的类型为 list<int[]>
Operasi yang disokong adalah sangat baik. arrays.aslist
返回一个仍然由底层数组支持的列表。因此, .set()
有效,但 .add()
无效(因为数组可以更改其元素,但不能增长或缩小)。 collections.shuffle
可以打乱任何列表,并且仅使用 .set
和 .get
来执行此操作: arrays.aslist
itu sendiri. allfeatures
tidak berubah, sila klon dahulu: allfeatures
int[][] clone = allFeatures.clone(); Collections.shuffle(Arrays.asList(clone));
Atas ialah kandungan terperinci Bagaimana untuk mengocok baris tatasusunan 2D di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!