我需要将非常大的 3d 矩阵从 Java 导出到 Matlab。我编写了一个用于创建 3d 矩阵的类,该类对于小型矩阵非常有效,但对于大型矩阵则无法正常工作。代码如下:
public class MLDouble3d extends MLDouble {
private final int i;
private final int j;
public MLDouble3d(String name, int[] dims) {
super(name, dims);
i=dims[0];
j=dims[1];
}
public void set(double value, int ii, int jj, int kk){
set(value, ii + jj * i + kk * i * j);
}
}
当我运行一个大矩阵时,出现以下错误:
Exception in thread "main" java.lang.IllegalArgumentException
at java.nio.Buffer.position(Buffer.java:236)
at com.jmatio.types.MLNumericArray._set(MLNumericArray.java:269)
at com.jmatio.types.MLNumericArray.setReal(MLNumericArray.java:111)
at com.jmatio.types.MLNumericArray.set(MLNumericArray.java:215)
我尝试过使用 MLSparse,但是它不能用于以这种方式创建 3d 矩阵。
我使用以下选项运行虚拟机:
-Xms24000M -Xmx24000M -Xmn16000M -XX:TLABSize=1m -XX:-ResizeTLAB
我能够将数据放入 double[][][] 数组中。
看来 dims[0]*dims[1]*dims[2] 对于整数来说太大了,它不能大于 2,147,483,647。否则整数无法存储索引。
我是一名优秀的程序员,十分优秀!