Tuple as index of multidimensional array

半城伤御伤魂 提交于 2019-11-30 08:37:48

问题


I found a very similar question to mine, but not exactly the same. This one: here However in ntimes's case the size of the array matches the number of the dimensions the tuple is point at. In my case I have a 4-dimensional array and a 2-dimensional tuple, just like this:

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

I want to use the tuple as an index to the first two dimensions, and manually index the last two. Something like:

big_array[tup,3,2]

However, I obtain a repetition of the first dimension with index=2, along the fourth dimension( since it technically hasn't been indexed). That is because this indexing is interpreting a double indexing to the first dimension instead of one value for each dimension,

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)|.

How can I 'unpack' this tuple then? Any ideas? thanks!


回答1:


You can also pass in your first tuple alone to get the slice of interest, then index it seprately:

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

That may be slightly more readable for some users, but otherwise I'd lean towards mgilson's solution.




回答2:


Since you're using numpy:

big_array[tup+(3,2)]

should work. When you call __getitem__ (via the square brackets), the stuff is passed to __getitem__ as a tuple. You just need to construct the tuple explicitly here (adding tuples together concatenates into a new tuple) and numpy will do what you want.



来源:https://stackoverflow.com/questions/12265751/tuple-as-index-of-multidimensional-array

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!