假设我有两个长度相同的向量 v1=[a,b,c,d,e,f]
和 v2=[1,1,2,3,3 ,3]
,(a、b、c、d、e、f 是一些数字)。我想创建另一个向量,其中第一个向量的分量根据第二个向量求和并排序。所以上面的结果应该是
结果=[a+b,c,d+e+f]
。我希望这是不言自明的。是否可以一步完成,而不是通过 for 循环?
最佳答案
您可以乘以使用 v2
作为行索引构建为稀疏
的矩阵:
v1 * sparse( 1:numel( v2 ), v2, ones( size( v2 ) ) )
要深入了解其作用,您可以检查矩阵本身:
M = sparse( 1:numel( v2 ), v2, ones( size( v2 ) ) )
full( M )
它显示为:
ans =
1 0 0
1 0 0
0 1 0
0 0 1
0 0 1
0 0 1
然后请记住,矩阵乘法的工作原理是将行(在本例中为 v1
的单行)映射到每一列,然后按列对乘积求和。
关于matlab - Matlab 中一次运行中由另一个向量决定的累积求和向量分量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27449731/