2017-12-02 1 views
-1

Ich möchte eine Maske mit numpy Array Ich habe eine Funktion, aber es macht nicht was ich will.Hier ist das Codebeispiel.Maske mit numpy isin

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

Dieser Code gibt diese:

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

Aber ich möchte die gleiche Ausgabe außer dem letzten Wert des Ausgangs-Array falsch. Weil ich brauche genaue Maske der Sequenz ([1,2,3,5,1]) in dieser Reihenfolge und nicht mehr als seine len

+0

'isin' ist ein Set wie Test. Jede '1' auf dem linken Array befindet sich auf der rechten Seite; Werte auf der rechten Seite werden nicht durch die Übereinstimmung verbraucht. Treten die Werte in Ihrem Problem immer in der gleichen Reihenfolge auf? Was, wenn die rechte Hand "[1,1,2,3,1,5]" enthielt? – hpaulj

Antwort

2

Sie Elemente nach gewissen True s auf Null drehen kann:

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

Danke für Ihre Antwort, es ist die Antwort auf meine Frage, aber nicht auf mein Problem. Ich habe meine Frage bearbeitet, um es klarer zu machen. –

+0

Es ist nicht leicht zu vektorisieren, was Sie in numpy fragen (nicht etwas, das ich in ein paar Minuten denken kann); Sie müssen wahrscheinlich Schleifen dafür schreiben. – Psidom

+0

Ich denke, du hast recht, es braucht 2 Loops, ich suche nur nach mehr zu optimieren Variante –