2016-02-11 125 views
2

我有一個大小爲28x28x60000的numpy數組。注意以下事項:數組索引NumPy沒有意義

>>> X.shape 
(28, 28, 60000) 
>>> X[:][:][0].shape 
(28, 60000) 

不宜X[:][:][0]是大小28x28的陣列?我們包括前兩個維度中的每個組件(每個維度28個),但僅包含第三個維度中的第0個維度。

這是怎麼回事?

+2

'X比較你X[:]X[:][:]語句[:,:0]'是在這裏切片的方式。 – cel

回答

3

X[:]將索引轉換爲所有維度的所有值,而不僅僅是第一個索引。所以X[:][:]是相同的X

爲了讓您的結果,您只需編寫X[:,:,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) 

您可以用all

In [261]: (X[:] == X[:][:]).all() 
Out[261]: True