numpy高级索引混乱

时间:2018-07-15 04:43:02

标签: numpy matrix multidimensional-array indexing numpy-ndarray

如果a为形状为(5,3)的numpy数组,b为形状(2,2),而c为形状(2,2),那么a [b,c]的形状是什么?

任何人都可以通过示例向我解释一下。我已经阅读了文档,但仍然无法理解其工作原理。

1 个答案:

答案 0 :(得分:3)

仅出于阐述高级索引概念的目的,这是一个人为的示例:

# input arrays
In [22]: a
Out[22]: 
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11],
       [12, 13, 14]])

In [23]: b
Out[23]: 
array([[0, 1],
       [2, 3]])

In [24]: c
Out[24]: 
array([[0, 1],
       [2, 2]])

# advanced indexing
In [25]: a[b, c]
Out[25]: 
array([[ 0,  4],
       [ 8, 11]])

通过表达式a[b, c],我们使用数组bc从数组a中有选择地提取元素。

解释a[b, c]的输出:

    # b            # c            # 2D indices
    [[0, 1],       [[0, 1]   ---> (0,0)  (1,1)
     [2, 3]]        [2, 2]]  ---> (2,2)  (3,2)

二维索引将简单地应用于数组a,相应的元素将作为数组返回到a[b, c]的结果

 a[(0,0)]  --> 0
 a[(1,1)]  --> 4
 a[(2,2)]  --> 8
 a[(3,2)]  --> 11

由于数组bc本身就是2D数组,因此上述元素将作为2D数组返回。


另外,请注意,高级索引编制始终会返回副本。

In [27]: (a[b, c]).flags.owndata
Out[27]: True