我需要将非常大的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[]数组中。
发布于 2014-02-09 02:03:30
似乎dims*dims1*dims2对于整数来说太大了,它不能大于2,147,483,647。否则,整数不能存储索引。
https://stackoverflow.com/questions/21648843
复制相似问题