我有一个稀疏的 2D 数据集,其中包含大约 600 万条记录,每条记录最多包含大约 20 个特征。我想将其转换为只有零和一的非稀疏二维数据集,但我不断收到 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];
似乎它甚至无法处理那么大的数组?获得一个非稀疏矩阵至关重要。有没有办法解决这个内存错误?
亲切的问候,