2013-07-14 2 views
2

.mat 파일에 수천 개의 변수 저장소가 있습니다. 한 번에 하나씩 루프에로드하고 있습니다. 그런 다음 작업 변수 변수 x을로드 된 변수 eval을 사용하여 할당합니다. 그런 다음로드 된 변수를 지 웁니다. 문제는 matlab에서 약 60,000 번의 반복 작업 후에 The current workspace already has too many variables 오류가 발생한다는 것입니다. 그러나 작업 공간을 점검 할 때 5-10 개의 변수 만있는 것으로 보입니다.eval을 사용하여 만든 변수를 지우는 방법은 무엇입니까?

for i = 1:m 
    load(sprintf('feat_%s.mat', ids{i}), sprintf('feat_%s', ids{i})); 
    eval(sprintf('x = feat_%s;', ids{i})); 
    clear(sprintf('feat_%s', ids{i})); 
end 

나는 이것이 eval 명령과 관련이 있다고 생각합니다. 나는 evalx의 여러 복사본을 생성하고 있다고 생각합니다. eval을 사용하여 생성 된 변수를 지우는 것에 대한 아이디어.

답변

1

eval을 사용하지 않는 것이 가장 좋습니다. 당신은 변수로 load 수 있습니다, 그것은 not to use i as a variable name in Matlab 최고의

for ii=1:m 
    nm = sprintf('feat_%s', ids{ii}); 
    ld = load([nm,'.mat'], nm); 
    x = ld.(nm); % access loaded variable WITHOUT eval 
    clear ld; % clear the loaded variable 
end 

PS입니다.

관련 문제