매우 큰 MATLAB 스파 스 스파스 매트릭스를 텍스트 파일에 저장하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/217852

  •  03-07-2019
  •  | 
  •  

문제

Matlab (버전 7)에는 30000x14000 스파 스 매트릭스가 있으며 다른 프로그램에서 사용해야합니다. Save를 호출하는 것은 이것을 ASCII (지원되지 않음)로 쓰지 않습니다. 부름 full() 이 괴물에서 Out of Memory 오류.
어떻게 내보내나요?

도움이 되었습니까?

해결책 3

Matlab 내에서 Java를 사용하여 텍스트로 저장했습니다. MATLAB 코드 :


pw=java.io.PrintWriter(java.io.FileWriter('c:\\retail.txt'));
line=num2str(0:size(data,2)-1);
pw.println(line);
for index=1:length(data)
    disp(index);
    line=num2str(full(data(index,:)));
    pw.println(line);
end
pw.flush();
pw.close();

여기 data 매우 큰 희소 행렬입니다.

다른 팁

찾기를 사용하여 색인 및 가치 벡터를 얻을 수 있습니다.

[i,j,val] = find(data)
data_dump = [i,j,val]

Spconvert를 사용하여 Data_dump에서 데이터를 다시 만들 수 있습니다. Spconvert는 "Sparse Matrix 외부 형식에서 가져 오기"를 의미합니다 (따라서 좋은 내보내기 형식이라고 생각합니다).

data = spconvert( data_dump )

다음과 같이 ASCII에 저장할 수 있습니다.

save -ascii data.txt data_dump

그러나 이것은 지수를 두 배로 덤프합니다. fopen/fprintf/fclose로 더 잘 작성할 수 있습니다.

fid = fopen('data.txt','w')
fprintf( fid,'%d %d %f\n', transpose(data_dump) )
fclose(fid)

도움이 되었기를 바랍니다.

희소 행렬을 a로 저장하십시오 .mat 파일. 그런 다음 다른 프로그램에서는 적절한 라이브러리를 사용하여 .mat 파일.

예를 들어, 다른 프로그램이 Python으로 작성된 경우 scipy.io.mio.loadmat 희소 배열을 지원하고 희소 한 Numpy 매트릭스를 제공하는 함수.

파티션을 시도 했습니까?

나는 1000 첫 줄 (또는 5000)에서 full ()를 호출 한 다음 작동하는 경우 프로세스를 반복하십시오.

사용 find 0이 아닌 요소의 지수를 얻는 기능 ...

idcs = find(data);
vals = data(idcs);
...save the index vector and value vector in whatever format you want...

원한다면 사용할 수 있습니다 ind2sub 선형 지수를 행으로 변환하려면 열 위시가 열됩니다.

Subscripts + 값에서 MATLAB에서 스파스 매트릭스를 재현 해야하는 경우 사용하십시오. spconvert.

dlmwrite -ASCII-Delimited 파일 구문에 행렬을 쓰십시오

dlmwrite (filename, m)

dlmwrite (filename, m, 'd')

dlmwrite (filename, m, 'd', r, c)

dlmwrite (filename, m, 'attrib1', value1, 'attrib2', value2, ...)

dlmwrite (filename, m, '-append')

dlmwrite (filename, m, '-append', 속성-값 목록)

이것이 거의 한 번의 거래라면, 나는 매트릭스를 반복하고 매트릭스를 Brute Force에 의해 ASCII 파일에 작성하거나 @를 사용합니다.베이 놈 행의 하위 집합에서 제안 및 전체 전화. 시간이 걸릴 수 있지만 MATLAB 환경 외부의 .mat 파일에서 읽는 방법을 배우는 데 걸리는 것보다 더 빨리 이루어질 것입니다.

이것이 반복적으로해야 할 일이라면 @를 가져갑니다.vebjorn조언과 라이브러리를 사용하여 .mat 파일을 읽습니다.

이 스크립트를 사용하십시오.MSM_TO_MM.M, Matlab Sparse 매트릭스를 MatrixMarket 파일에 씁니다.

유용 할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top