2017-12-02 4 views
-1

numpyの配列でマスクを作りたいファンクションを作ったけど、私が望むものを作っていない。ここにコード例がある。numpyのマスクisin

array([ True, True, True, False, True, False, False, True, True], dtype=bool) 

しかし、私は、出力配列の最後の値を除き、同じ出力がFalseになりたい:

np.isin([1,2,3,4,5,8,6,1,1],[1,2,3,5,1]) 

このコードは、これを返します。 私はこの順序でシーケンスの正確なマスク([1,2,3,5,1])を必要とし、もはやそのLEN

+0

'isin'はテストのようなセットです。左側の配列の各「1」は右側にあります。右の値はマッチすることによって使い切られません。あなたの問題では、値は常に同じ順序で発生しますか?右側のものに '[1,1,2,3,1,5]'が含まれていたら? – hpaulj

答えて

2

よりもあなたがしてゼロにTrue秒の一定量の後の要素を変えることができますので:

mask[mask.cumsum() > 5] = False 
#     ^length of the second array 

import numpy as np 
mask = np.isin([1,2,3,4,5,8,6,1,1],[1,2,3,5,1]) 

mask[mask.cumsum() > 5] = False 
mask 
# array([ True, True, True, False, True, False, False, True, False], dtype=bool) 
+0

あなたの答えをありがとう、それは私の質問の答えですが、私の問題はありません。私は質問を編集して、それをもっと明確にしました。 –

+0

numpyで何を求めているのかをベクトル化するのは簡単ではありません(数分間で考えることはできません)。おそらく、そのためのループを書く必要があります。 – Psidom

+0

私はあなたが正しいと思います、2つのループが必要です、より多くの最適化バリアントを探しています –

関連する問題