2017-09-01 15 views
1

2つのnumpy配列があります。1dブール値配列を使用した2d配列

filtered_x = filter(x,y) 
print(filtered_x) # [[1,2], [5,6]] should be shown. 

私はnp.extractを試みたが、xが1次元配列の場合にのみ動作するようです:私はyの対応する要素がTrueとなっているXの要素を取得したいのですが

x = [[1,2], [3,4], [5,6]] 
y = [True, False, True] 

の要素を抽出するには、yの対応する値はTrueですか?

+1

x [y]。ブーリアンインデックスと呼ばれています。 –

+0

y [x.index(val)]] 'のような' [val for val in x]のようなリストの理解を試してみることができます。シンプルでエレガント。 –

+0

@AsadMoosviとnumpyよりも遅い関数を組み込み、np.arrayを返しません。 –

答えて

6

だけboolean indexingを使用します。

>>> import numpy as np 

>>> x = np.array([[1,2], [3,4], [5,6]]) 
>>> y = np.array([True, False, True]) 
>>> x[y] # or "x[y, :]" because the boolean array is applied to the first dimension (in this case the "rows") 
array([[1, 2], 
     [5, 6]]) 

そして、あなたが代わりに行の列にそれを適用したい場合:

>>> x = np.array([[1,2], [3,4], [5,6]]) 
>>> y = np.array([True, False]) 
>>> x[:, y] # boolean array is applied to the second dimension (in this case the "columns") 
array([[1], 
     [3], 
     [5]]) 
+3

一貫性と明確さのために、私はx [y、:]とx [:, y]を好む – Jblasco

+2

末尾の '、:'は省略します。入力する必要があり、結果を含めない場合は省略します。しかし、私はそれが理解しやすいところを見ることができます。 :) – MSeifert

0

l=[x[i] for i in range(0,len(y)) if y[i]]、これはそれを行います。

関連する問題