簡體   English   中英

元組作為多維數組的索引

[英]Tuple as index of multidimensional array

我發現了一個與我非常相似的問題,但不完全相同。 這一個: 這里但是在ntimes的情況下,數組的大小與元組指向的維度的數量相匹配。 在我的情況下,我有一個4維數組和一個二維元組,就像這樣:

from numpy.random import rand
big_array=rand(3,3,4,5)
tup=(2,2)

我想使用元組作為前兩個維度的索引,並手動索引最后兩個維度。 就像是:

big_array[tup,3,2]

但是,我沿着第四維獲得了索引= 2的第一維的重復(因為它在技術上沒有被索引)。 這是因為這個索引將雙索引解釋為第一維而不是每個維的一個值,

eg. 
| dim 0:(index 2 AND index 2) , dim 1:(index 3), dim 2:(index 2), dim 3:(no index)|
instead of 
|dim 0(index 2), dim 1(index 2), dim 2:(index 3), dim 3:(index 2)|.

那我怎么能“打開”這個元組呢? 有任何想法嗎? 謝謝!

既然你正在使用numpy

big_array[tup+(3,2)]

應該管用。 當你調用__getitem__ (通過方括號)時,這些東西作為元組傳遞給__getitem__ 你只需要在這里明確地構造tuple (將元組連接在一起形成一個新的元組), numpy將做你想要的。

你也可以單獨傳遞你的第一個元組來獲得感興趣的切片,然后分別編入索引:

from numpy.random import rand
big_array=rand(3,3,4,5)
chosen_slice = (2,2)

>>> big_array[ chosen_slice ]
array([[ 0.96281602,  0.38296561,  0.59362615,  0.74032818,  0.88169483],
       [ 0.54893771,  0.33640089,  0.53352849,  0.75534718,  0.38815883],
       [ 0.85247424,  0.9441886 ,  0.74682007,  0.87371017,  0.68644639],
       [ 0.52858188,  0.74717948,  0.76120181,  0.08314177,  0.99557654]])

>>> chosen_part = (1,1)

>>> big_array[ chosen_slice ][ chosen_part ]
0.33640088565877657

對於某些用戶而言,這可能稍微更具可讀性,但除此之外,我傾向於mgilson的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM