寻找快速处理细胞基质的方法

时间:2013-07-15 01:23:57

标签: matlab matrix

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

最后一个循环,如果非常慢。这是用任何方式使用一个语句而不是循环来做同样的事情吗?感谢。

1 个答案:

答案 0 :(得分:1)

因为Z实际上从未改变并且cellfun确实返回统一输出,所以以下速度要快〜100倍。

K=repmat(cellfun(@(idx) sum(M(idx)), IND)',1,P);