2014-02-08 35 views
1

我需要从Java中将非常大的3d矩阵导出到Matlab。我已经写了一个创建一个3d矩阵的类,它对于小矩阵非常有效,但对于大矩阵来说却是失败的。代码如下:在Java中使用JMatio导出非常大的矩阵

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 

我能够适合在一个双[] [] []数组中的数据。

回答

1

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

+0

有没有办法解决它?比如像将整数改为long,例如?或者也许是一个不同的库? –

+0

我会将Java'double [] [] []'存储在使用任何java库(例如hibernate,xml等)的文件中,并通过java将其加载到matlab中。 Java-Code可以直接从matlab命令行执行。 – Daniel