【问题标题】:How do I add elements from one numpy array to another at certain indices?如何在某些索引处将元素从一个 numpy 数组添加到另一个数组?
【发布时间】:2016-03-15 08:36:30
【问题描述】:

我在一个数组中有元素的形式(索引,值),例如

5, 20
8, 10

我需要将这些元素添加到另一个最初为空的不同大小的数组中,例如

X = np.zeros((1, 10))

并将 X 的值设置为索引处第一个数组中给出的值。所以 X 最后应该是

X = [0, 0, 0, 0, 0, 20, 0, 0, 10, 0]

因为 X 的第 5 个元素应该是 20,而第 8 个元素应该是 10。是否有一个 numpy 数组函数可以做到这一点,或者我可以使用其他什么来快速计算?

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    您正在寻找np.add.at。因此,假设X 是一个1D 数组,其中要存储加法,A 是保存要添加的索引和值的数组,你可以这样做 -

    np.add.at(X,A[:,0],A[:,1])
    

    因此,输入是:

    X      : Array holding the additions
    A[:,0] : Indices where additions are to be stored
    A[:,1] : Values to be added
    

    示例运行 -

    In [21]: A = np.array([[5,20],[8,10]])      # Indices and values
    
    In [22]: X = np.zeros(10,dtype=A.dtype)     # Array to store additions
    
    In [23]: np.add.at(X,A[:,0],A[:,1])         # Perform np.add.at
    
    In [24]: X                                  # Show output
    Out[24]: array([ 0,  0,  0,  0,  0, 20,  0,  0, 10,  0])
    

    如果通过“添加”,您的意思是索引是唯一的,并且您只想“放置”值,而不是“添加”,您可以初始化输出数组并对其进行索引,如下所示的示例案例-

    In [25]: A = np.array([[5,20],[8,10]])
    
    In [26]: X = np.zeros(10,dtype=A.dtype)
    
    In [27]: X[A[:,0]] = A[:,1]
    
    In [28]: X
    Out[28]: array([ 0,  0,  0,  0,  0, 20,  0,  0, 10,  0])
    

    【讨论】:

      猜你喜欢
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 2020-01-31
      • 1970-01-01
      • 2011-11-04
      • 2021-12-05
      相关资源
      最近更新 更多