我有一个256 x 256的矩阵M,并生成了一些线性索引L。
此外,我有一个权重向量,其元素数量与L相同,要将其添加到由L索引的M元素中。 问题是,使用以下表达式
M(L) = M(L) + weights;
对于L中的重复值,只有权重weights中最后一个相应元素会被添加。
是否有简单的解决方法/我是否漏掉了什么?
% 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);
L
是 [3 3 2 2 2 1]
,我的原始代码将失败,因为 unique
包括排序步骤,但 accumarray
不包括。 - Dennis Jaheruddin
X = [1; 1]; L = [1 1 2]; W = 10 * ones(length(L), 1); X(L) = X(L) + W;
。我认为 OP 想要实现的行为是X
的第一个元素等于21
,第二个元素等于11
。但是我提供的代码却使得两个元素都等于11
。这是一个有趣的问题!祝好运。 - Colin T Bowers