【问题标题】:How to set single element of multi dimensional Numpy Array using another Numpy array?如何使用另一个 Numpy 数组设置多维 Numpy 数组的单个元素?
【发布时间】:2017-06-07 17:23:55
【问题描述】:

如果我们有一个像这样的 numpy 数组:

Array = np.zeros((2, 10, 10))

我们想要设置它的一个元素,由另一个元素给出

indexes = np.array([0,0,0])

我们该怎么做?

Array[indexes] = 5 

正在将 Array 的 FIRST 维度的每个元素设置为 5

【问题讨论】:

  • 你也可以使用列表(不是numpy.array):Array[0, 0, 0] = 5 只将第一个零设置为5。

标签: python arrays numpy indexing


【解决方案1】:

使用a 作为数据数组,idx 作为索引数组,这样每一行对应于要在数据数组中设置的一个元素,您可以这样做 -

a[tuple(idx.T)] = 5

示例运行 -

In [94]: a = np.zeros((2,2,3),dtype=int)

In [95]: idx = np.array([[0,0,0],[1,1,0],[0,1,2]])

In [96]: a[tuple(idx.T)] = 5

In [97]: a
Out[97]: 
array([[[5, 0, 0],
        [0, 0, 5]],

       [[0, 0, 0],
        [5, 0, 0]]])

In [98]: a[tuple(idx.T)] = [5,10,15] # or set different values

In [99]: a
Out[99]: 
array([[[ 5,  0,  0],
        [ 0,  0, 15]],

       [[ 0,  0,  0],
        [10,  0,  0]]])

或者,我们可以使用np.ravel_multi_index 计算线性索引,然后使用np.put 执行分配,就像这样 -

np.put(a,np.ravel_multi_index(idx.T,a.shape),5)

如果您正在处理三维数组,我们可以对三维索引进行切片并分配给另一种方法,就像这样 -

a[idx[:,0],idx[:,1],idx[:,2]] = 5

如果只需要设置一个元素,就这样做 -

a[tuple(idx)] = 5

示例运行 -

In [118]: a = np.zeros((2,2,3),dtype=int)

In [119]: idx = np.array([0,0,0])

In [120]: a[tuple(idx)] = 5

In [121]: a
Out[121]: 
array([[[5, 0, 0],
        [0, 0, 0]],

       [[0, 0, 0],
        [0, 0, 0]]])

【讨论】:

  • 谢谢,这很有帮助!在完成您的示例并应用它之后,我只是忘记发表评论,这花了几天时间。无论如何,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 2013-09-30
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多