我有一个向量J,它包含向量的行索引。
我想以矢量化方式执行以下代码:我想将重复值与变量“M”中的变量“Mode”相加。我有size(M)=size(J)
。这是我尝试过的代码:
Mode=zeros(n,1);
for i=1:length(J)
Mode(J(i))=Mode(J(i))+M(i);
end
我已经测试了
Mode(J)=M
但问题是J中有一些重复的索引值。 我该如何正确实施?
答案 0 :(得分:3)
您可能正在寻找accumarray
。
看一下这个例子:
tempfile.TemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None]]]]])
来自文档:
J = [1 2 3 5 2 3].'; M = [1 1 1 1 1 1].'; Mode = accumarray(J, M, size(J)) Mode = 1 2 2 0 1 0
通过使用下标A = accumarray(subs,val)
累积向量A
的元素来返回数组val
。如果subs
是列向量,则每个元素在输出中定义相应的下标,该下标也是列向量。subs
函数收集accumarray
中具有相同下标的val
的所有元素,并将其总和存储在与该下标对应的subs
的位置(A
。其for index i, A(i)=sum(val(subs(:)==i)))
下标A
的元素等于subs
。
0
用于确保size(J)
的维度与Mode
的维度相同。
根据OP,以下代码有效:
J