【发布时间】:2014-07-29 14:17:57
【问题描述】:
我有两个 M×N 矩阵,分别标记为 A 和 B,我想创建一个向量,其中包含 B 中所有项目的总和,对应于 A 的每个唯一值。例如,我有以下矩阵:
A = [6 2 3 4
5 2 3 3
5 5 6 2];
B = [.2 .5 .4 .1
.7 .2 .5 .1
.6 .6 .1 .9];
我想创建一个向量 C,其中每个索引对应于 D = unique(A) 的索引。所以对于这种情况,D = [2,3,4,5,6] 和
for I = 1:length(D)
C(I) = sum(B(A(:)==D(I));
end
当 D 的长度为 2000 个项目并且 A 和 B 都是 ~4000x20 矩阵时,这会变得非常慢。对加快速度有任何帮助吗?我尝试执行以下操作:
Indxs = bsxfun(@eq,A,reshape(D,1,1,length(D)));
for I = 1:size(Indxs,3)
C(I) = sum(B(Indxs(:,:,I));
end
但它并没有真正更快。
【问题讨论】:
-
另外,我正在预分配 C 以加快速度。
标签: matlab matrix sum conditional vectorization