我有一个256 x 256矩阵M,并产生了一些线性索引L.
我还有一个权重向量,数字与L相同,被加到由L索引的M元素中。 问题是,用表达式
M(L) = M(L) + weights;
对于L中的重复值,只会添加权重中最后一个对应的元素。
有没有一种简单的方法可以解决这个问题/我错过了什么?
答案 0 :(得分:2)
我认为去这里的方法是使用accumarray:
% The 'data'
M = zeros(10,5); % Suppose this is your matrix
L = [46 47 47 46 48 49 48 48 48]'; % The linear index numbers
weights = [4 7 4 6 4 9 48 8 48]'; % The weights for these index numbers
% Make sure the indices are in ascending order
Y = SORTROWS([L weights]);
% Determining the weights to be added
idx = unique(Y(:,1));
weights_unique = accumarray(Y(:,1),Y(:,2));
% The addition
M(idx) = M(idx) + weights_unique(weights_unique>0);