Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在matlab中优雅地求和为向量的重复索引_Matlab_Vectorization - Fatal编程技术网

如何在matlab中优雅地求和为向量的重复索引

如何在matlab中优雅地求和为向量的重复索引,matlab,vectorization,Matlab,Vectorization,我正试图找到一种不进行循环的方法来执行以下操作: 假设我有一个向量x,其中我将一些元素e相加。我还有一个索引向量id,它表示要将值发送到x的哪些元素。i、 e x = zeros(1,4); e = [ 1 10 100 1e3 1e4]; ids = [1 1 2 4 3]; 我想做一些像 x(ids) = x(ids) + e 那会回来的 x = 11 100 10000 1000 因为我们引用x(1)两次,而它返回 x

我正试图找到一种不进行循环的方法来执行以下操作:

假设我有一个向量
x
,其中我将一些元素
e
相加。我还有一个索引向量
id
,它表示要将值发送到
x
的哪些元素。i、 e

x = zeros(1,4);
e = [ 1 10 100 1e3 1e4];
ids = [1 1 2 4 3];
我想做一些像

x(ids) = x(ids) + e
那会回来的

x =

          11         100       10000        1000
因为我们引用x(1)两次,而它返回

x =

          10         100       10000        1000

accumaray
是一个非常有用的函数,可以实现这些技巧。就你而言:

accumarray(ids',e)

将完成这项工作。

accumaray
是一个非常有用的函数,用于执行此类技巧。就你而言:

accumarray(ids',e)

将完成这项工作。

使用
accumarray
accumarray(ids,e)
。使用
accumarray
accumarray(ids,e)
。就像中提到的@Divakar。转置是怎么回事?没有必要这样做。@Adriaan我认为当它是行向量时,
ids
需要这样做。因此,为了使其通用,使其能够与任何向量一起工作,可以执行
accumarray(id(:),e)
e
上的转置不需要,尽管.OP将ID作为行向量,accumarray将其解释为5维向量的一个索引。不需要换位e,这是我的错误。就像中提到的@Divakar。转置是怎么回事?没有必要这样做。@Adriaan我认为当它是行向量时,
ids
需要这样做。因此,为了使其通用,使其能够与任何向量一起工作,可以执行
accumarray(id(:),e)
e
上的转置不需要,尽管.OP将ID作为行向量,accumarray将其解释为5维向量的一个索引。不需要转换e,那是我的错误。