【Python】ベクトルから要素の抽出(条件と一致したもの,Trueのインデックス)
Numpyで動作は確認しているがlistで動作するかは未確認 -> 2019.5.13 listの場合を追加
これは覚えておくと便利
numpyの場合
条件に合うものを抽出
a = numpy.array([1,2,3,4,5,6]) a = a[a%2 ==0] >>array([2, 4, 6]) #←条件が合う要素のみが返る
2016.11.13追記:np.whereでも同じ様に動作。np.whereは条件が一致するインデックスを返すみたい。
a = a[np.where(a%2 == 0)] # 複数条件の場合は a = a[np.where((a%2 == 0) & (a > 2))]
Trueになっているインデックスと同じ要素を抽出
a = numpy.array([1,2,3,4,5,6]) b = numpy.array([-3,-2,-1,0,1,2,3]) c = b < 0 >>array([ True, True, True, False, False, False, False], dtype=bool) #←TrueかFalseが返る d = b[c] array([-3, -2, -1]) #←Trueが入っているインデックスのみ抽出して返す
ちなみにnumpyのBool配列を反転するには反転演算子~を使う
e = ~c
listの場合
条件に合うものを抽出
## list内包表記を使う必要あり a = [1,2,3,4,5,6] b = [x%2 ==0 for x in a] >>[False, True, False, True, False, True] b = [x for x in a if x%2==0] >>[2, 4, 6]
奇数の数値が含まれているかどうか
## list内包表記を使う必要あり a = [1,2,3,4,5,6] b = [x%2 ==0 for x in a] >>[False, True, False, True, False, True] c = any(b) >> True ## 使用例 if any([x%2 ==0 for x in a]):