Numpy 高级索引混乱
Numpy Advanced Indexing confusion
如果a是形状为(5,3)的numpy数组,b是形状(2,2),c是形状(2,2),那么a[b,c]的形状是什么?
谁能举个例子给我解释一下。我已经阅读了文档,但仍然无法理解它是如何工作的。
只是为了阐述高级索引的概念,这里是一个人为的例子:
# 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]
,我们使用数组b
和c
从数组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
以上元素作为二维数组返回,因为数组 b
和 c
本身就是二维数组。
此外,请注意高级索引总是 returns 一个副本。
In [27]: (a[b, c]).flags.owndata
Out[27]: True
但是,使用高级索引的赋值操作将改变原始数组(就地)。但是,此行为还取决于两个因素:
- 你的索引操作是纯粹的(只有高级索引)还是混合的(高级和简单索引的组合)
- 在混合索引的情况下,它们的应用顺序。
参见:
如果a是形状为(5,3)的numpy数组,b是形状(2,2),c是形状(2,2),那么a[b,c]的形状是什么?
谁能举个例子给我解释一下。我已经阅读了文档,但仍然无法理解它是如何工作的。
只是为了阐述高级索引的概念,这里是一个人为的例子:
# 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]
,我们使用数组b
和c
从数组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
以上元素作为二维数组返回,因为数组 b
和 c
本身就是二维数组。
此外,请注意高级索引总是 returns 一个副本。
In [27]: (a[b, c]).flags.owndata
Out[27]: True
但是,使用高级索引的赋值操作将改变原始数组(就地)。但是,此行为还取决于两个因素:
- 你的索引操作是纯粹的(只有高级索引)还是混合的(高级和简单索引的组合)
- 在混合索引的情况下,它们的应用顺序。
参见: