読者です 読者をやめる 読者になる 読者になる

山下寛人オフィシャルブログ

オイシックス株式会社 執行役員 システム本部長 山下寛人の公式ブログです。

ndarrayのちょい技2

今度は2次元配列で、ある列が条件を満たす行だけを抽出するサンプルです。
SQLのwhereのようなことをするイメージです。
numpyはnpとしてimportしておきます。

data = data[np.where(data[:, 0]<1600)]

解説します。
data[:, 0]は、0列目を全部の行数分取り出します。

>>> data[:, 0]
array([ 1944.3333,  1501.    ,   778.    , ...,   160.    ,  3202.6667,
        2566.5   ])

data[:, 0]<1600とすると、それぞれの値が1600未満かどうかでTrue,Falseに変わります。

>>> data[:, 0]<1600
array([False,  True,  True, ...,  True, False, False], dtype=bool)

np.where()はTrueになっている要素の位置のリストを返します。

>>> np.where(data[:, 0]<1600)
(array([   1,    2,    5, ..., 4994, 4996, 4997]),)

0番目がFalseなので1,2・・・となっているわけです。
最後にdata[]の添字に渡すと該当する行だけの2次元配列になります。

>>> data[np.where(data[:, 0]<1600)]
array([[ 1501.    ,  2817.    ],
       [  778.    ,  4384.    ],
       [  181.    ,  5091.7   ],
       ..., 
       [ 1230.    ,  4451.    ],
       [ 1172.3077,  2340.8462],
       [  160.    ,  3993.6667]])

pandasでも同じようなことが簡単にできるようなのでやってみようと思います。