매우 큰 MATLAB 스파 스 스파스 매트릭스를 텍스트 파일에 저장하려면 어떻게해야합니까?
문제
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', 속성-값 목록)
이 스크립트를 사용하십시오.MSM_TO_MM.M, Matlab Sparse 매트릭스를 MatrixMarket 파일에 씁니다.
이 실 유용 할 수도 있습니다.