假设我有一个向量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
) - 指定位置作为一组坐标,用于积累到ND数组
- 预设累计数组的尺寸(默认扩展到最大位置)
-
pad带自定义值的非累积位置(pad默认为
0
) - 将累计数组设置为
sparse
,从而可能避免内存不足
[sum(A(1:2:end));sum(A(2:2:end))]