2014-02-08 40 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