【问题标题】:Numpy Advanced Indexing confusionNumpy 高级索引混淆
【发布时间】:2018-12-23 00:40:21
【问题描述】:

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

谁能用一个例子向我解释一下。我已经阅读了文档,但我仍然无法理解它是如何工作的。

【问题讨论】:

  • bc的内容是什么?它应该包含a[b, c] 的有效索引才能正常工作
  • 显示一个简单的运行。

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


【解决方案1】:

只是为了阐述高级索引的概念,这里是一个人为的例子:

# 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 本身就是二维数组。


另外,请注意高级索引总是返回一个副本。

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

【讨论】:

    猜你喜欢
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多