7

私は自分と非常によく似た質問を見つけましたが、まったく同じではありません。これは:ここです が、ntimesの場合、配列のサイズはタプルが指す次元の数と一致します。私の場合、次のように4次元配列と2次元タプルがあります。

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

タプルを最初の2つのディメンションのインデックスとして使用し、最後の2つのディメンションに手動でインデックスを付けたいと思います。何かのようなもの:

big_array[tup,3,2]

ただし、4番目の次元に沿ってindex = 2の最初の次元の繰り返しを取得します(技術的には索引付けされていないため)。これは、このインデックスが、ディメンションごとに1つの値ではなく、最初のディメンションへのダブルインデックスを解釈しているためです。

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

では、どうすればこのタプルを「解凍」できますか?何か案は?ありがとう!

4

2 に答える 2

9

使用しているのでnumpy

big_array[tup+(3,2)]

動作するはずです。(角かっこを介して)呼び出すと、ものはタプルとして__getitem__渡されます。__getitem__ここで明示的に構築する必要がありtuple(タプルを一緒に追加すると、新しいタプルに連結されます)、numpy必要な処理を実行できます。

于 2012-09-04T14:38:28.043 に答える
3

また、最初のタプルを単独で渡して対象のスライスを取得し、それを個別にインデックス付けすることもできます。

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のソリューションに傾倒します。

于 2012-09-04T14:47:32.793 に答える