假设我有一个向量B=[1 1 2 2]
,并A=[5 6 7 4]
以 B 的形式表示 A 中需要汇总的数字。也就是说,我们需要将 5 和 6 相加作为结果数组的第一个条目,并将 7 和 4 相加作为第二个条目。如果 B 是[1 2 1 2]
结果的第一个元素是 5+7,第二个元素是 6+4。
在一般意义上,我怎么能在 Matlab 中做到这一点?
假设我有一个向量B=[1 1 2 2]
,并A=[5 6 7 4]
以 B 的形式表示 A 中需要汇总的数字。也就是说,我们需要将 5 和 6 相加作为结果数组的第一个条目,并将 7 和 4 相加作为第二个条目。如果 B 是[1 2 1 2]
结果的第一个元素是 5+7,第二个元素是 6+4。
在一般意义上,我怎么能在 Matlab 中做到这一点?
一种灵活且通用的方法是使用accumarray()
.
accumarray(B',A')
该函数将 A 中的值累加到 B 指定的位置。
由于文档不容易理解,我将总结为什么它是灵活的。你可以:
sum
默认)0
默认情况下填充)sparse
,从而避免内存不足[sum(A(1:2:end));sum(A(2:2:end))]