2017-06-05 2 views
4

ナンシークイックチュートリアルを読むと、私はこの文を理解できません。ナンシーチュートリアル - ブールインデックス

a = np.arange(12).reshape(3,4) 
b1 = np.array([False,True,True]) 
b2 = np.array([True,False,True,False]) 
>>> a[b1,b2] 
array([ 4, 10]) 

a[b1,b2]array([4,10])代わりのarray([[4,6],[8,10]])あるのはなぜ?

答えて

5

あなたがinteger array indexingを実行しているからです。

内部的には、インデックスは、ブール配列から計算される -

In [72]: idx1 = np.flatnonzero(b1) 

In [73]: idx2 = np.flatnonzero(b2) 

In [75]: idx1 
Out[75]: array([1, 2]) 

In [76]: idx2 
Out[76]: array([0, 2]) 

そして、整数配列のインデックスは、インデックス付けアレイからの各要素を使用して、インデックスの各グループに対して行われる -

In [77]: a[1,0] # 1 from idx1[0], 0 from idx2[0] 
Out[77]: 4 

In [78]: a[2,2] # 2 from idx1[1], 2 from idx2[1] 
Out[78]: 10 

MATLABスタイルのブロック抽出を実現するには、開いた配列を使用して、それらの軸/ dimのそれぞれにインデックスを付ける必要があります。 numpyの中で、このようなオープンな配列を作成するために、我々はnp.ix_持っている -

In [89]: np.ix_(b1,b2) 
Out[89]: 
(array([[1], 
     [2]]), array([[0, 2]])) 

In [90]: a[np.ix_(b1,b2)] 
Out[90]: 
array([[ 4, 6], 
     [ 8, 10]]) 
+0

をいただき、ありがとうございます!!!!!今私は完全に理解している。心から感謝する。ありがとうございました –

+0

@ JeongYeojinこれがあなたの質問を解決した場合は、ソリューションの横にあるくぼみをクリックして受け入れることを検討してください。詳細情報 - https://meta.stackexchange.com/questions/5234/how-does-accepting-an-解答 – Divakar

関連する問題