2

2Dnumpy配列から特定の値を抽出する方法について質問があります

Foo = 
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])

Bar =
array([[0, 0, 1],
       [1, 2, 3]])

Barの値をインデックスとして使用して、Fooから要素を抽出したいので、最終的Bazにはと同じ形状の2D行列/配列になりBarます。対応するのi3番目の列はBazFoo[(np.array(each j in Bar[:,i]),np.array(i,i,i,i ...))]

Baz =
array([[ 1,  2,  6],
       [ 4,  8, 12]])

ネストされたforループをいくつか実行することもできますが、これを実行するためのよりエレガントで、ゴツゴツした方法があるかどうか疑問に思いました。

これが少し複雑な場合は申し訳ありません。さらに説明する必要がある場合はお知らせください。

ありがとう!

4

1 に答える 1

2

Bar行インデックスとして使用し、列インデックスとして配列を使用できます[0, 1, 2]

# for easy copy-pasting
import numpy as np
Foo = np.array([[ 1,  2,  3], [ 4,  5,  6], [ 7,  8,  9],  [10, 11, 12]])
Bar = np.array([[0, 0, 1], [1, 2, 3]])

# now use Bar as the `i` coordinate and 0, 1, 2 as the `j` coordinate:

Foo[Bar, [0, 1, 2]]
# array([[ 1,  2,  6],
#        [ 4,  8, 12]])

# OR, to automatically generate the [0, 1, 2]

Foo[Bar, xrange(Bar.shape[1])]
于 2012-11-20T00:27:44.653 に答える