[PYTHON] Suchen Sie in numpy.array nach True

Es ist eine häufige Sache, aber ich habe es so oft geschrieben, dass ich den Code aufschreibe

Was du machen willst

Lassen Sie für numpy.array nur N Mal hintereinander True image.png

Weise

Durch Verschieben und und finden Sie zwei aufeinanderfolgende Startpunkte, und durch Verschieben oder Verschieben um einen können Sie bis zum Endpunkt mit True füllen.

Wenn Sie das und den Teil zweimal ausführen, finden Sie 3 aufeinanderfolgende Startpunkte, und wenn Sie es 3 Mal ausführen, finden Sie 4 aufeinanderfolgende Startpunkte. Wenn Sie dies also erneut schreiben, können Sie die aufeinanderfolgenden Startpunkte beliebig oft finden. image.png

1. Bereiten Sie die Matrix vor

python


import numpy as np
arr = np.array([[True,  False, False, True,  False, False, False],
                [False, False, True,  True,  True,  True,  False],
                [False, True,  True,  False, True,  False, True ],
                [False, False, False, False, True,  True,  False],
                [True,  True,  False, False, False, False, False]])
arr

2. Lassen Sie nur durchgehende Bereiche

python


def is_continuous(arr, left_cnt):
    if left_cnt >= 1:
        arr2 = arr[:, :-1] & arr[:, 1:]
        arr2 = is_continuous(arr2, left_cnt - 1)
    else:
        arr2 = arr
    return arr2

def check_continuous(arr, continuous_cnt):
    arr2 = is_continuous(arr, continuous_cnt - 1)
    arr3 = np.tile(np.full(continuous_cnt - 1, False), arr2.shape[0]).reshape(-1, arr2.shape[0]).T
    arr2 = np.hstack([arr2, arr3])
    for _ in range(continuous_cnt - 1):
        arr2[:, 1:] = arr2[:, 1:] | arr2[:, :-1]
    return arr2

print(arr)
check_continuous(arr, 2)

Sie sollten jetzt eine Ausgabe ähnlich der folgenden erhalten

Recommended Posts

Suchen Sie in numpy.array nach True
Suchen Sie nach dem Namen der OpenCV-Funktion
Suchen Sie nach Zeichenfolgen in Dateien
[Excel] Suche nach doppelten Werten (Zeichen)
Zusammenfassung der Halbierungssuche für Wettbewerbsprofis
Suchen Sie mit opencv nach phasenidentischen zusammengesetzten Wörtern
Effiziente Suche nach optimalen Parametern (Optuna)
Vektorisieren Sie Sätze und suchen Sie nach ähnlichen Sätzen