2014-02-08 3 views
1

Java에서 Matlab으로 매우 큰 3d 행렬을 내보낼 필요가 있습니다. 나는 작은 행렬에 대해 매우 잘 작동하지만 큰 행렬에 대해 분해하는 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를 사용하여 시도했다, 그러나 3 차원 매트릭스를 만드는 데 사용할 수 없습니다 다음과 같이 코드는 이 방법.

나는 다음과 같은 옵션을 사용하여 가상 머신을 실행

-Xms24000M -Xmx24000M -Xmn16000M -XX:TLABSize=1m -XX:-ResizeTLAB 

내가 이중 [] [] [] 배열의 데이터에 맞게 수 있어요.

답변

1

dims [0] * dims [1] * dims [2]가 정수의 경우 큰 것으로 보입니다. 2,147,483,647보다 클 수 없습니다. 그렇지 않으면 정수가 인덱스를 저장할 수 없습니다.

+0

주위에 경로가 있습니까? 정수를 long으로 변경하는 것, 예를 들어? 아니면 다른 도서관일까요? –

+0

나는 임의의 자바 라이브러리 (예 : hibernate, xml, 뭐든)를 사용하여 파일에 java'double [] [] []'을 저장하고 java를 통해 matlab에로드 할 것이다. 자바 코드는 matlab 커맨드 라인에서 직접 실행될 수 있습니다. – Daniel

관련 문제