我有一个大单元格,每个元素都带有一个大矩阵(M)索引的集合。我对那些索引指定的M元素进行了一些操作,比如
N=1000;
P=100;
M=rand(N, N);
K=zeros(N, P);
for n=1:N
IND{n} = [randi(N, 1, randi(200))];
end
tic
for m=1:P
for n=1:N
K(n, m) = sum(sum(M(IND{n})));
end
end
toc
tic
for m=1:P
Z = cellfun(@(idx) sum(M(idx)), IND, 'UniformOutput', false);
K(:, m) = [Z{:}];
end
toc
最后一个循环,如果非常慢。这是用任何方式使用一个语句而不是循环来做同样的事情吗?感谢。
答案 0 :(得分:1)
因为Z实际上从未改变并且cellfun确实返回统一输出,所以以下速度要快〜100倍。
K=repmat(cellfun(@(idx) sum(M(idx)), IND)',1,P);