それぞれ最大約 20 個の特徴を含む、約 600 万レコードのスパース 2D データ セットがあります。これを 0 と 1 のみの非スパース 2D データ セットに変換したいのですが、OutOfMemoryError が発生し続けます。
これが私のデータセットの例です:
1: 1723762 2737 2 283
2: 239 220 12 19237 2795
3: 3910 2931 86043 26354 349874 73736 2611 93921 4123830
4: 5
5: 4728 2
...(up to ~6mil)
私はそれを次のように変換したい:
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...(up to ~6mil)
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
...(up to ~6mil)
最初の行の 2 列目に 1 があることに注意してください。これは、元のデータ セットにその特徴があるためです。4 行目の 5 列目と 5 行目の 2 列目も同様です。
このためのコードを作成しましたが、次のことを試すと、すでにメモリが不足しています。
File data = new File("dataSet.txt");
Scanner in = new Scanner(data);
//check how many rows
int nRows = 0;
while (in.hasNextLine()) {
in.nextLine();
nRows++;
}
//initializing the matrix
in.close();
in = new Scanner(data);
int[][] matrix = new int[nRows][nRows];
その大きな配列を処理することさえできないようですか?非疎行列を取得することが重要です。このメモリエラーを回避する方法はありますか?
敬具、