【问题标题】:Adding value of a vector to another using Octave/Matlab使用 Octave/Matlab 将向量的值添加到另一个向量
【发布时间】:2012-04-11 04:19:00
【问题描述】:

我有一个值向量,需要在另一个向量指定的索引处添加到第二个向量。如何使用 Octave/Matlab 完成此任务?

编辑: v1 = [1 2 3 4]

v2 = [0 0]

指数 = [1 2 1 2]

输出 = [4 6]

v1 的第一个和第三个元素添加到 v2 的索引 1,v1 的第二个和第四个元素添加到 v2 的第二个元素。

【问题讨论】:

  • 能否请您提供一个关于所有向量(和所需输出)的可重复的小示例?这将使我们更容易理解您的意思。

标签: matlab octave


【解决方案1】:

认为这就是你的意思(如果你在你的问题中提供一个小例子更容易理解)。

你有一个值向量

toAdd = 1:5;

你有第二个更大的向量:

bigVector = 1:10;

您想做bigVector + toAdd,将toAdd 的元素在特定 索引处添加到bigVector,指定:

indices = [1 3 5 7 9];

也就是说,你想要输出向量:

[ bigVector(1)+toAdd(1);
  bigVector(2);
  bigVector(3)+toAdd(2);
  bigVector(4);
  bigVector(5)+toAdd(3);
  ....
 ]

在这种情况下,您可以执行以下操作:

outputVector = bigVector;
outputVector(indices) = bigVector(indices) + toAdd;

特别注意outputVector(indices)bigVector(indices),它们选择向量indices 指定的outputVectorbigVector 的元素。

【讨论】:

    【解决方案2】:

    应该这样做:

    for k=unique(indices),
        v2(k) = v2(k) + sum(v1(indices==k));
    end
    

    【讨论】:

    • 这个问题有点不清楚,但看起来你不需要将总和添加到 v2(k) 所以只需:for k=unique(indices), v2(k) = sum( v1(指数==k));结束
    • 在问题中它说“v1的第一个和第三个元素被添加到v2的索引1”。所以 v2 可能有不同的初始值,即使在这种情况下它是零。
    • 我同意 - 但这可能意味着它们被相互添加,然后放在索引 1 等中......无论哪种方式我都同意你的解决方案。
    【解决方案3】:

    这是……

    v2 = accumarray(indices, v1)
    

    【讨论】:

      猜你喜欢
      • 2013-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多