あなたが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]])
をいただき、ありがとうございます!!!!!今私は完全に理解している。心から感謝する。ありがとうございました –
@ JeongYeojinこれがあなたの質問を解決した場合は、ソリューションの横にあるくぼみをクリックして受け入れることを検討してください。詳細情報 - https://meta.stackexchange.com/questions/5234/how-does-accepting-an-解答 – Divakar