Python Numpy 2D数组索引问题?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (59)

请帮助我理解如何对一些用作索引的数组进行索引?我有以下六个二维数组

array([[2, 0],
   [3, 0],
   [3, 1],
   [5, 0],
   [5, 1],
   [5, 2]])

我想使用这些数组作为索引,并将值10放入新的空矩阵的相应索引中。输出应该是这样的:

array([[ 0,  0,  0],
   [ 0,  0,  0],
   [10,  0,  0],
   [10, 10,  0],
   [ 0,  0,  0],
   [10, 10, 10]])

到目前为止我已经试过了:

    from numpy import*
    a = array([[2,0],[3,0],[3,1],[5,0],[5,1],[5,2]])
    b = zeros((6,3),dtype ='int32')
    b[a] = 10

但这给了我错误的输出。

提问于
用户回答回答于
In [1]: import numpy as np
In [2]: a = np.array([[2,0],[3,0],[3,1],[5,0],[5,1],[5,2]])
In [3]: b = np.zeros((6,3), dtype='int32')

In [4]: b[a[:,0], a[:,1]] = 10

In [5]: b
Out[5]: 
array([[ 0,  0,  0],
       [ 0,  0,  0],
       [10,  0,  0],
       [10, 10,  0],
       [ 0,  0,  0],
       [10, 10, 10]])

其工作原理:

如果你索引2赋值中的numpy数组,

b[x, y] = z

然后将NumPy想象为同时移动在每一个元素每一个元素(让我们打电话给他们,,,和),并分配给b。xval,yval价值.何时是一个常数,“移过去”次只返回相同的值。

这就是我们想要的第一栏和的第二栏此,选择,和...

b[a[:,0], a[:,1]] = 10

b[a] = 10不起作用

当你写,将NumPy看作是通过移动(让我们打电话给每个人)并在新数组中放置在…的位置在...

是.所以它是整数32。形状(6,3),所以是一排形状(3,)。例如,当

In [37]: a[1,1]
Out[37]: 0

In [38]: b[a[1,1]]
Out[38]: array([0, 0, 0])

所以

In [33]: b[a].shape
Out[33]: (6, 2, 3)

因此,让我们重复一遍:NumPy通过移动在新数组中放置在…的位置在.作移过去,将创建一个形状数组(6,2)。但既然它本身是形状(3,),在(6,2)字形阵列中的每个位置,一个(3,)形状的值被放置。结果是一个形状数组(6,2,3)。

现在,当你做一个任务时

b[a] = 10

具有值的临时形状数组(6,2,3)创建,然后执行分配。由于10是一个常数,此赋值将值10放在(6,2,3)形状数组中的每个位置。然后将临时数组的值重新分配回.参考文档。

扫码关注云+社区

领取腾讯云代金券