2

我有数千个变量存储在 .mat 文件中。我一次将它们加载到一个循环中。x然后,我使用.将加载的变量分配给工作区变量eval。然后,我清除加载的变量。问题是 matlabThe current workspace already has too many variables在大约 60,000 次迭代后给出错误。但是,在检查工作区时,似乎只存在 5-10 个变量。

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命令有关。我猜这eval是创建多个x. 关于清除使用创建的变量的任何想法eval

4

1 回答 1

1

最好不要使用eval。你可以load进入一个变量:

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,
最好不要i在 Matlab 中用作变量名

于 2013-07-14T16:05:48.740 回答