2017-06-20 235 views
1

我想我正確理解python/numpy中數組的索引。但今天我遇到了一個問題,如下所示:python numpy數組索引

我有一個6維陣列,例如AA.shape = (11,1,9,1,5,7)。 然後,我使用索引如下:

B = A[:,0,0,0,[3,4,2],0] 

B.shape = (11,3)和如預期;

C = A[:,0,0,0,[3,4,2],:] 

and C.shape = (11,3,7) as expected;

但是,當我說:

D = A[:,0,:,0,[3,4,2],0] 

D.shape(11,9,3)我可以期待,不過,蟒蛇返回D.shape = (3, 11, 9)

而我對數組D的形狀非常困惑。

有沒有人可以給我一個簡短的解釋? 非常感謝!

+1

有大約混合片,並列出了'基本與advanced'索引文檔的部分。有一些不明確的地方,'numpy'選擇將切片尺寸放在最後。在以前的SO問題中也討論過這種行爲。 – hpaulj

+0

[Explain slice notation]的可能重複(https://stackoverflow.com/questions/509211/explain-slice-notation) – polka

+0

不,這不僅僅是一個普通的切片問題。這是更微妙的東西。 – hpaulj

回答

2

https://docs.scipy.org/doc/numpy-1.12.0/reference/arrays.indexing.html#combining-advanced-and-basic-indexing

A[:,0,:,0,[3,4,2],0] 

索引與 '高級' 列表討論的,[3,4,2]產生大小3的尺寸。之後添加第一個和第三個維度,形成(3,11,9)形狀。

這種行爲有些爭議,尤其是當其他指標是標量時。當有兩個索引列表時,文檔中給出的理由更加清晰。

Numpy sub-array assignment with advanced, mixed indexing

+0

嗨hpaulj,非常感謝答覆。現在我明白了在使用slice和seq的組合時要小心的地方。整數。 – zlpython

+0

對於數組B和C,切片也被用於(但僅限於第一維和最後一維)並與其他標量索引組合使用,這些索引以我通常可以預期的方式工作。但是,對於數組D,在標量索引之間使用了切片,我想這是導致數組形狀導致其他行爲的原因。但是關於這個語法,它仍然很容易被混淆。 – zlpython