俺言語。

自分にしか理解できない言語で書かれた備忘録

【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]):