【发布时间】:2018-12-13 05:03:16
【问题描述】:
根据numpy documentation,将数组索引指定为array_name[x, y] 和array_name[x][y] 是等效的,并且应该产生相同的结果。但是,下面的代码sn -p:
import numpy as np
a = np.empty((7, 8, 9), dtype = object)
# First indexing notation
print(a[:, 0, 0].shape, a[0, :, 0].shape, a[0, 0, :].shape)
# Second indexing notation
print(a[:][0][0].shape, a[0][:][0].shape, a[0][0][:].shape)
产生输出:
(7,) (8,) (9,)
(9,) (9,) (9,)
分别,这显然是不等价的。什么给了?
【问题讨论】:
-
使用
[:]进行索引没有任何作用。即使有一个列表,它也只是复制。使用x[....][...][...],您必须单独查看每个索引操作的操作。口译员一次应用一个。在[,.., ..., ...]numpy可以一起使用。 -
等效仅适用于单元素索引,不适用于切片(使用
:)或高级索引。 -
知道了,谢谢。您能否解释一下导致 Python 在第二行产生结果的原因?
-
如果省略
[:],则归结为a[0][0],与a[0,0]或a[0,0,:]相同。 -
但是第 2 行的所有三个表达式都计算为 a[0, 0, :] 是不是很奇怪?这是我缺少的某种功能吗?