我有一个大小为28x28x60000
的numpy数组。请注意以下事项:
>>> X.shape
(28, 28, 60000)
>>> X[:][:][0].shape
(28, 60000)
不应该X[:][:][0]
是一个大小为28x28
的数组吗?我们包括前两个维度(每个28个)的每个组件,但只包括第三个维度的第0个条目。
这里发生了什么?
答案 0 :(得分:6)
你切错了。切片X[:]
返回原始数组的副本。因此,您的切片可以被解释为X的第一个副本,然后是X的另一个副本,然后获得具有28x60000形状的第一个元素。所以你需要致电X[:,:,0]
。例如:
import numpy as np
X = np.random.randn(28,28,60000)
In [257]: X[:,:,0].shape
Out[257]: (28, 28)
您可以将X[:]
和X[:][:]
语句与all
In [261]: (X[:] == X[:][:]).all()
Out[261]: True
答案 1 :(得分:3)
X[:]
索引所有维度的所有值,而不仅仅是第一个维度。因此X[:][:]
与X
要获得结果,只需撰写X[:,:,0]