Gibt es eine einfache Möglichkeit, alle relevanten Elemente in NumPy-Array nach einem Muster zu finden?Suche nach einem Muster in numpy Array
Betrachten wir zum Beispiel die folgende Array:
a = array(['zzzz', 'zzzd', 'zzdd', 'zddd', 'dddn', 'ddnz', 'dnzn', 'nznz',
'znzn', 'nznd', 'zndd', 'nddd', 'ddnn', 'dnnn', 'nnnz', 'nnzn',
'nznn', 'znnn', 'nnnn', 'nnnd', 'nndd', 'dddz', 'ddzn', 'dznn',
'znnz', 'nnzz', 'nzzz', 'zzzn', 'zznn', 'dddd', 'dnnd'], dtype=object)
Und ich brauche, um alle Kombinationen zu finden, die '** dd' enthalten.
Ich brauche im Grunde eine Funktion, die das Array als Eingabe empfängt und gibt eine kleinere Array mit allen relevanten Elementen:
>> b = func(a, pattern='**dd')
>> b = array(['zzdd', 'zddd', 'zndd', 'nddd', 'nndd', 'dddd'], dtype=object)
'" ** dd "' ist nicht die Regex, die Sie brauchen. Vielleicht meinst du Wildcard? In diesem Fall ist 'fnmatch' Ihre Lösung. Aber schreibe '" ?? dd "' –
Beiseite: in vielen Fällen (nicht alle, aber wahrscheinlich am meisten), wenn Sie mit Strings in numpy Arrays arbeiten, sind Sie generell besser dran mit einer einfachen Liste arbeiten - auch wenn Sie dann wieder in ein ndarray konvertieren - oder eine pandas.Series. Wann immer Sie sich mit 'dtype = object' ndarrays beschäftigen, sollten Sie sich fragen, ob Sie falsch abgebogen sind. – DSM
@DSM, Sie haben hier völlig Recht mit der Verwendung von numpy Arrays. Ich arbeite mit Pandas Datenrahmen und eine meiner Spalten enthält verschiedene Kombinationen von vier Buchstaben. Ich habe diese eine Spalte einfach extrahiert, um das Problem zu demonstrieren, das ich zur Hand habe. –