2014-06-06 1 views
2

나는 거대한 2 차원 희소 행렬을 생성하는 곳에서 시뮬레이션을 실행하므로 FIND 함수를 사용하여 인덱스가 0이 아닌 값만 저장합니다..mat 파일 행이나 열 단위 cellmatrix에 추가하는 방법

이제 for 루프의 각 반복에 대해 이러한 행렬을 생성하고 모든 길이가 다르기 때문에 셀 배열을 사용하여 이러한 구성을 저장합니다. 그러나 대규모 시뮬레이션의 경우 셀 어레이의 압축 된 형식조차도 메모리 한계를 넘기 때문에 코드를 실행하는 동안 이러한 셀 어레이를 쓰고 싶습니다. 즉, 각 반복마다 기존 요소의 매트 파일에 새 요소를 추가하십시오.

for n=1:10 
A=rand(5); 
[i,j,vals]=find(A); 
data={[i,j,vals]}; 
save('data','data','-append'); 
end 

여기 내 최종 목표는 "데이터"의 요소 수 (10)이다 매트 파일을 가지고하는 것입니다하지만 난 때문에 메모리 문제로 내가 데이터를 생성 할 루프의 외부 저장하지 못할 {N} 그것을 세로로 성장하는 방식으로 덧붙인다. 결국 {10} 데이터를 제공합니다.

MATFILE을 사용하려고했으나 {}이 (가) 작동하지 않아 셀 배열이 작동하지 않는다는 오류가 발생했습니다.

당신은 save와 기존 변수에 데이터를 추가 할 수 없습니다, 니틴

+1

. 내가 당신의 질문을 해결하는 방법을 모르겠지만 나는 당신에게 왜 당신이 그것을하려는 의도인지 물어볼 것입니다. 변수를 저장할 때 그 문제가 발생하면 장래에로드 할 때 변수가 생깁니다. 그러므로 당신은 그것을 피해야합니다. Luis Mendo가 제안한대로 저장하지 않으시겠습니까? – ASantosRibeiro

+0

MATFILE 함수 (셀 어레이에서 작동하는 경우)를 .mat 파일의 일부분으로 작성하면로드하지 않고도 파일의 일부를 읽을 수 있습니다. 따라서 MATFILE은 셀 어레이가 작동하는 경우 셀 어레이로 작업해야합니다. – nitin

+0

왜 자신의 롤링 대신 MATLAB의 원시 스파 스 형식을 사용하지 않는지 궁금합니다. – nhowe

답변

1

실제 셀에 색인을 지정하지 않는 한, matfile을 셀과 함께 사용할 수 있습니다. 셀은 여전히 ​​배열이므로 배열 인덱싱을 사용하여 각 셀에 액세스 할 수 있습니다. 예 :

>> x = {'this', 'is', 'an', 'example'}; 
>> x{4} 

ans = 

example 

>> x(4) 

ans = 

    'example' 

다음은 데이터를 초기화합니다. 효율적인 부분 저장 및 로딩을 지원하도록 '-v7.3'태그와 함께 저장하십시오.

data = {}; 
save('data.mat', 'data', '-v7.3'); 

이제 matfile 사용하여 데이터에 액세스 할 수 있습니다

mf = matfile('data.mat', 'Writable', true); 
for n=1:10 
    A=rand(5); 
    [i,j,vals]=find(A); 
    data={[i,j,vals]}; 
    mf.data(end+1, 1) = data; 
end 

참조 : matfile documentation 정말 좋은 질문은

+0

고마워요. 이것은 대략 내가 찾고 있었던 것입니다. – nitin

0

을 주셔서 감사합니다. 다른 변수가 필요합니다.

clear all 
filename = 'data.mat'; 
save(filename) %// empty file, for now. We'll append variables within the loop 
for n = 1:10 
    A = rand(5); 
    [i,j,vals] = find(A); 
    varname = ['data' num2str(n)]; %// varname is 'data1', 'data2' etc 
    assignin('base',varname,[i,j,vals]); %// create that variable 
    save(filename, varname, '-append') %// append it to file 
end 
+0

나는 그것을 생각했지만 문제는 내 .mat 파일에 수백만 개의 변수가 있다는 것입니다. 감사. – nitin

관련 문제