特定の行・列を残す:Python,Numpy

Pandasで条件を指定して行・列を抜き出すやつが有ると思います.正式名称は分かりませんが,df[val>0]みたいなやつです.Numpyのarrayでおんなじことが出来るか試したので,メモ書きしておきます.

まずはこんな感じで配列を作ります.そして1個飛ばしで列を獲得できるかやってみます.

In [31]: import numpy as np

In [32]: a = np.array([[ 0,  1,  2,  3],
    ...:            [ 4,  5,  6,  7],
    ...:            [ 8,  9, 10, 11],
    ...:            [12, 13, 14, 15]])

In [33]: label = np.array([ 0,  1,  0,  1])

In [34]: mask = (label == 1)

まずは一個飛ばしで列を獲得してみます.
f:id:shu10038:20170411165227j:plain

In [35]: a[:,mask]
Out[35]: 
array([[ 1,  3],
       [ 5,  7],
       [ 9, 11],
       [13, 15]])


続いて一個飛ばしで行を獲得してみます.
f:id:shu10038:20170411165210j:plain

In [36]: a[mask,:]
Out[36]: 
array([[ 4,  5,  6,  7],
       [12, 13, 14, 15]])


それでは,一個飛ばしで行と列の両方を獲得するにはどうやるのでしょう?
f:id:shu10038:20170411165244j:plain

In [37]: a[mask,mask]
Out[37]: array([ 5, 15])

これだと上手く行かないので,次のように書いてみました.

In [38]: a[:,mask][mask,:]
Out[38]: 
array([[ 5,  7],
       [13, 15]])