https://teratail.com/questions/172545
にて、np.chooseを使えばよいのではとご回答いただき、試したところchooseは要素数が32までに制限されるようで、再質問させていただきます。前回回答くださった方には、質問の情報が不十分で申し訳ありませんでした。
前提・実現したいこと
(n×m×l)の3次元の配列Aでそれぞれx軸、y軸、z軸と考えます。
z軸のインデックスを与える(n×m)の配列Bを使って、指定するz軸の値を切り出した(n×m)の配列aを得たいです。実際のデータのn,m,lはそれぞれ8000,30,200程度。
つまり以下のコードでやっているようなことです。
python
1import numpy as np 2import itertools 3 4A = np.arange(2*3*4).reshape(2,3,4) #元の三次元配列 5B = np.array([[0,1,1],[1,2,3]]) #Z軸のインデックスを示す配列 6a = np.zeros((2,3)) #Aから指定するZ軸の値を取りだして格納する配列 7 8for i,j in itertools.product([0,1],[0,1,2]): 9 a[i,j] = A[i,j,B[i,j]]
試したこと
numpy.chooseを使う→chooseの要素数の制限でだめ。
Bが示すz軸インデックスの要素のみ1で他は0のAと同じshapeの配列bを作ってA[b==1]で取り出す→一応意図通り動くのだがスマートではないような…
numpy.selectを使うと実現できそうな気がするのですが、conditionをどう書けばよいのかわかりませんでした。
Pythonらしい解決法をご教示いただければ、ありがたいです。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/02/07 04:46
2019/02/07 05:23
退会済みユーザー
2019/02/07 05:40