1

(タイトルの真偽はわかりません)

私は次のように持ってnumpy.array fいます:

# id frame x y z

私がやりたいことは、特定の の軌跡を抽出することですid。たとえば、id==1次のようになります。

f_1 = f[ f[:,0]==1 ]

そして得る

array([[   1.     ,   55.     ,  381.51   , -135.476  ,  163.751  ],
       [   1.     ,   56.     ,  369.176  , -134.842  ,  163.751  ],
       [   1.     ,   57.     ,  357.499  , -134.204  ,  163.751  ],
       [   1.     ,   58.     ,  346.65   , -133.786  ,  163.751  ],
       [   1.     ,   59.     ,  336.602  , -133.762  ,  163.751  ],
       [   1.     ,   60.     ,  326.762  , -135.157  ,  163.751  ],
       [   1.     ,   61.     ,  315.77   , -135.898  ,  163.751  ],
       [   1.     ,   62.     ,  303.806  , -136.855  ,  163.751  ],
       [   1.     ,   63.     ,  291.273  , -138.255  ,  163.751  ],
       [   1.     ,   64.     ,  278.767  , -139.824  ,  163.751  ],
       [   1.     ,   65.     ,  266.778  , -141.123  ,  163.751  ],
       [   1.     ,   66.     ,  255.773  , -142.42   ,  163.751  ],
       [   1.     ,   67.     ,  244.864  , -143.314  ,  163.751  ]])

私の問題は、それがどのように機能するかを理解していないことです。通常、私は次のようなものを期待していました:

f_1 = f[ f[:,0]==1, : ]

これも機能し、私にとってより理にかなっています。(すべての列を取得しますが、必要な条件を満たす行のみを取得します)

このフォームも機能する理由と、正確に何が起こるかを誰かが説明できますか?

f_1 = f[ f[:,0]==1 ]
4

2 に答える 2

1

1 つのインデックスのみを要求する 2D 配列の場合、そのインデックスに対応する行 (すべての列を含む) が返されるため、次のようになります。

np.all( a[0] == a[0,:] )
#True

すると、次a[0]==1のようなブール配列が得られます。

b = a[0]==1
#array([True, True, False, False, True], dtype=bool)

派手なインデックス付けを使用して、インデックスが に対応するTrue値を持つすべての行を取得できますb。この例では、次のことを行います。

c = a[ b ]

インデックスに対応する行を取得します[0,1,4]。のように、これらのインデックスを直接渡すことによって同じ結果が得られc = a[ [0,1,4] ]ます。

于 2013-06-07T11:26:42.333 に答える