使用Java中的JMatio导出非常大的矩阵

时间:2014-02-08 16:50:49

标签: java matlab sparse-matrix

我需要从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 [] [] []数组中。

1 个答案:

答案 0 :(得分:1)

似乎dims [0] * dims [1] * dims [2]对于整数来说是大的,它不能大于2,147,483,647。否则整数不能存储索引。