我有一个 3D 向量s1
(nmax,mmax,ntimeSTEPS)。我想在每个时间步j
(即第三维的每个值)取前两个维度的所有元素并获得一个向量来给出sprintf
。但是,sprintf
如果在一个循环内,会非常缓慢!我检查了手册,看起来没有办法直接使用线性索引来做到这一点。还是我错过了什么?我只能想到使用reshape
,但类似的东西s1(:,j)
会是最重要的,但这不是 MATLAB 的工作方式。我做了:
nmax = 800;
mmax =400;
nmax_x_mmax = nmax*mmax;
ntimeSTEPS = 1;
charINPUT = cell(nmax_x_mmax,1);
s1 = ones(nmax,mmax,ntimeSTEPS)*1234;
tic
for j=1:ntimeSTEPS
%... other stuff
input=reshape(s1(:,:,j),nmax_x_mmax,1);
for kk=1:length(input)
charINPUT{kk} = sprintf('%6.3f',input(kk));
end
%... other stuff (collecting movie frames etc)
end
toc
在我的 i7 2.2 GHz 上,这一步需要 5.09 秒!我正在尝试制作动画,这非常慢。如果我增加数组的大小,它基本上会卡住。对使用线性索引执行此操作有什么建议吗?