In [869]: a
Out[869]:
matrix([[1, 2, 3],
[1, 3, 4]])
In [870]: b
Out[870]: matrix([[0, 1]])
を理解していませんこの使用
はnonzero
と同じである。
In [871]: np.where(b==1)
Out[871]: (array([0], dtype=int32), array([1], dtype=int32))
In [872]: np.nonzero(b==1)
Out[872]: (array([0], dtype=int32), array([1], dtype=int32))
これは、各ディメンション(np.matrix
2)のための1つの割り出しアレイをタプルを与えます。 ind,_=
はそれらの配列をアンパックし、2番目の配列をスローします。 _
は、私が使っているようなインタラクティブなセッションで再利用されます。
In [873]: ind,_ =np.nonzero(b==1)
In [874]: ind
Out[874]: array([0], dtype=int32)
where
戻りa
から(0,1)の値で選択。しかし、それはあなたが欲しいものですか?
In [875]: a[np.where(b==1)]
Out[875]: matrix([[2]])
:
追加するインデックスに配列全体を行い、しかし添加寸法を有します。再び、おそらく私たちが
In [876]: a[np.where(b==1),:]
Out[876]:
matrix([[[1, 2, 3]],
[[1, 3, 4]]])
ind
たいのは、単一のインデックス配列ではない、とそうa
から0の行を選択します。
In [877]: a[ind,:]
Out[877]: matrix([[1, 2, 3]])
In [878]:
しかしb==1
がb
の第二の要素を見つけ、その後、a
の2列目を選択するようになっていますか? a
とb
がnp.matrix
あるため、インデックスをb
In [881]: a[:,np.where(b==1)[1]]
Out[881]:
matrix([[2],
[3]])
の第二列に対応するa
から
In [878]: a[np.where(b==1)[1],:]
Out[878]: matrix([[1, 3, 4]])
または第二列:我々はwhere
から2番目のインデックス配列を使用する必要があることを行うために、結果は常に2dです。 c
アレイについて
、where
我々は、一般的にも、2D、新しいアレイを構築するnp.array
を使用して助言単一要素タプル
In [882]: c=np.array([0,1])
In [883]: np.where(c==1)
Out[883]: (array([1], dtype=int32),)
In [884]: a[_,:] # here _ is the last result, Out[883]
Out[884]: matrix([[1, 3, 4]])
を生成します。 np.matrix
はMATLABユーザーの便宜のために、新しいnumpy
ユーザーを混乱させることがあります。
'nonzero'はタプルを返します。したがって、最初のケースではタプルを使用してスライスします。2番目の例では、 '_'がスローアウェイ/プレースホルダー変数として使用されています(これについてはここで答えが見つかります)ので、' nonzero'によって返されたタプルの最初の要素だけを使ってスライスします。結果 – gionni