小编use*_*992的帖子

如何在不使用for循环的情况下对不同大小的矩阵的部分求和?

我有一个相对较大的矩阵NxN(N~20,000)和一个Nx1向量,用于识别必须组合在一起的索引.

我想将矩阵的一部分加在一起,原则上可以有不同数量的元素和非相邻元素.我很快写了一个正常工作的双循环,但当然效率很低.分析器将这些循环识别为我的代码中的瓶颈之一.

我试图找到一种智能矢量化方法来解决这个问题.我探索了arrayfun,cellfunbsxfun函数,并寻找类似问题的解决方案......但我还没有找到最终的解决方案.

这是带有两个for循环的测试代码:

M=rand(10); % test matrix
idxM=[1 2 2 3 4 4 4 1 4 2]; % each element indicates to which group each row/column of M belongs
nT=size(M,1);
sumM=zeros(max(idxM),max(idxM));
for t1=1:nT
    for t2=1:nT
        sumM(t1,t2) = sum(sum(M(idxM==t1,idxM==t2)));
    end
end
Run Code Online (Sandbox Code Playgroud)

matlab matrix vectorization bsxfun

6
推荐指数
1
解决办法
115
查看次数

标签 统计

bsxfun ×1

matlab ×1

matrix ×1

vectorization ×1