0

我有一个大单元格,每个元素都带有一个大矩阵(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

最后一个循环如果很慢。那有什么方法可以使用一条语句而不是循环来做同样的事情吗?谢谢。

4

1 回答 1

1

因为 Z 从未真正改变并且 cellfun 确实返回了统一的输出,所以下面的速度要快 100 倍。

K=repmat(cellfun(@(idx) sum(M(idx)), IND)',1,P);
于 2013-07-15T09:04:47.767 回答