텍스트 파일에 희소 행렬을 쓰고 싶습니다. 내 희소 행렬이 A
이라고 가정 해 봅시다. A
의 첫 번째 행은 10,11 번째 색인에서 0이 아닌 값을가집니다. 두 번째 행은 1,2 번째 인덱스에서 0이 아닌 값을가집니다. 그런 다음 텍스트 파일에 데이터를 쓸 때이 형식은 다음과 같아야합니다.텍스트 파일에 희소 행렬을 쓰는 방법
10 11
1 2
......
....
어떻게 이것을 MATLAB에서 수행 할 수 있습니까?
텍스트 파일에 희소 행렬을 쓰고 싶습니다. 내 희소 행렬이 A
이라고 가정 해 봅시다. A
의 첫 번째 행은 10,11 번째 색인에서 0이 아닌 값을가집니다. 두 번째 행은 1,2 번째 인덱스에서 0이 아닌 값을가집니다. 그런 다음 텍스트 파일에 데이터를 쓸 때이 형식은 다음과 같아야합니다.텍스트 파일에 희소 행렬을 쓰는 방법
10 11
1 2
......
....
어떻게 이것을 MATLAB에서 수행 할 수 있습니까?
게시 코드가 허용되는지 확실하지 않은 첫 번째 게시물이지만, 아마도 이것이 당신이 찾고있는 것일까요? 제약 조건을 감안할 때
[rows, cols] = size(A);
outFile = fopen('sparse.txt', 'a');
for m = 1:rows
n = 1;
while n <= cols
if A(m, n) ~= 0
fprintf(outFile, '%d ', A(m, n));
end
n = n+1;
end
fprintf(outFile, '\r\n');
end
이것은 실제로 비효율적입니다. 내 데이터 크기는 2 백만에서 10 만입니다. 각 행을 반복 할 수 없습니다. – user34790
@ user34790 그러면 어떻게됩니까? http://stackoverflow.com/questions/217852/how-can-i-save-a-very-large-matlab-sparse-matrix-to-a-text-file –
, 난 단지 정말 주어진 형식에 대해 하나의 현명한 선택을 참조하십시오
: 는f = fopen('out.txt', 'w');
for ii=1:size(mat, 1)
fprintf(f, '%u ', find(mat(ii, :));
fprintf(f, '\n');
end
fclose(f);
행 당 요소의 수는 일정하지 않기 때문에,이 두 가지를 의미합니다
fprintf
도 하나의 전체 행을 하나의 호출로 작성하는 고정 형식 문자열을 제공 할 수 없으므로 복수 fprintf
호출이 필요합니다.따라서 이러한 제약 조건을 최적화하십시오. 직접 행을 통해
find
로 한 번에 행과 열 인덱스를 꺼내 수 있지만, 우리는 낭비했습니다 메모리가 효과적으로 전체 데이터 세트를 복사, 우리는가이 여전히 을 거라고 어떻게 든 반복 할 수 있습니다.find
및 벡터화 된 fprintf
의 로우 레벨 내부는 최소한 가능한 한 빨리 단일 행을 처리하도록하십시오. 이 I/어쨌든 O가 결합 된 것으로 책임을지지, 그래서 정말 루프 자체의 오버 헤드는 fprintf
통화의 경우에도 최소한의 수에 비해 무시할 수 있어야 -때때로 간단한 루프는 정말 최선의 방법입니다.
행당 항상 동일한 수의 요소가 있습니까? 그렇지 않은 경우 빈 행이 있습니까? – Notlikethat
해당 항목의 실제 값을 신경 쓰지 않습니까? –
@ LuisMendo. 아니, 나는 실제 가치에 관심이 없다. – user34790