Arrays 将一个矩阵中的元素根据另一个矩阵中的值求和到一个数组中

Arrays 将一个矩阵中的元素根据另一个矩阵中的值求和到一个数组中,arrays,matlab,loops,matrix,sum,Arrays,Matlab,Loops,Matrix,Sum,我想根据矩阵R中的值将矩阵M的元素求和到数组d中 从理论上讲,它不能序列化,因为求和到一个数组(D)的操作需要对相同数据的内存访问 我用以下方式实现了它 for ind = 1: numel(R) d(R(ind)) = d(R(ind)) + M(ind); end 就像@Andrew在这个相关话题中建议的那样: 数组R的元素不是每一个都大,也不是1或2,它可以是例如1到15 在Matlab中有没有更有效的方法来实现这一点,即使操作的“理论复杂性”会更糟 因为它也可以

我想根据矩阵R中的值将矩阵M的元素求和到数组d中

从理论上讲,它不能序列化,因为求和到一个数组(D)的操作需要对相同数据的内存访问

我用以下方式实现了它

for ind = 1: numel(R)
    d(R(ind)) = d(R(ind)) + M(ind);      
end 
就像@Andrew在这个相关话题中建议的那样:

数组R的元素不是每一个都大,也不是1或2,它可以是例如1到15

在Matlab中有没有更有效的方法来实现这一点,即使操作的“理论复杂性”会更糟

因为它也可以通过迭代R中的可能值,并在R=val的索引中求M元素的和,或者在Matlab中任何更“内置”的元素来解决,这些元素通常不“喜欢”循环

例如,在SQL中,您有一个“内置”方法来折叠一列的重复,并获取另一列中的值之和

有一个主题是关于类似的行动,但用不同的语言:

这很可能可以使用Matlab的函数来完成。大概是这样的:

d = accumarray(R, M, expected_size_of_d)

但是,如果您给我们提供
M
R
的示例值以及预期的
d
,这将非常有用,因为精确解可能取决于矩阵的形状,如果您使用线性索引与否,您的问题并不十分清楚。如果要对
M
的选定元素求和,其中选择由
R
给出,可以执行以下操作:

dsum(M(sub2ind(size(M),R(:,1),R(:,2))))
例如,考虑

M = [1 2 3;
     4 5 6;
     7 8 9];

R = [1 1; 3 1; 2 2]; % each row selects an element of M
结果给出了M(1,1)+M(3,1)+M(2,2):


请给出一些R和M的最小示例以及预期输出。
>> sum(M(sub2ind(size(M),R(:,1),R(:,2))))
ans =
    13