matlab - Matlab 中一次运行中由另一个向量决定的累积求和向量分量

标签 matlab vector

假设我有两个长度相同的向量 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/

相关文章:

python - 如何在python中使用Matlab的imresize

arrays - 如何从元胞数组调用函数句柄?

c++ - 错误 : expected constructor, 析构函数,或 '(' token 之前的类型转换?

c++ - 在 OpenCV 中将 vector 转换为垫子

multithreading - Matlab多线程函数

matlab - 将元素分配到矩阵的下三角部分

c++ - 在 vector 的每个结构元素中重置值的最快方法?

c++ - 整数 C++ 的二维 vector 。怎么了?

c++ - 如何从文本文件中读取数据并将其加载到 vector 中?

c++ - 我应该如何为我的 C++ 程序实现泛洪填充功能?