Mam macierz od 100 do 100 numpy. Macierz jest w większości wypełniona zerami, ale zawiera również pewną liczbę int. Na przykład:Efektywna identyfikacja sąsiednich elementów w macierzach numpy
[0 0 0 0 0 0 0 1]
[0 2 2 0 0 0 0 0]
[0 0 2 0 0 0 0 0] False
[0 0 0 0 0 0 0 0]
[0 3 3 0 0 0 0 0]
Co jest najbardziej skutecznym sposobem na określenie, czy macierz zawiera dowolną liczbę sąsiadujących wskazówki z różnych typów?
Powyższy przykład zwróci wartość Fałsz. Oto prawdziwy przykład, z wierszem zawierającym wskazane sąsiedztwo:
[0 0 0 0 0 0 0 1]
[0 2 2 1 1 0 0 0] <---- True
[0 0 2 0 0 0 0 0]
[0 0 0 0 0 0 0 0]
[0 3 3 0 0 0 0 0]
Przekątne nie są traktowane jako sąsiadujące. Tak więc ten przykład również zwróciłby fałsz:
[0 0 0 1 1 1 1 1]
[0 2 2 0 1 0 0 0]
[0 0 2 0 0 0 0 0] False
[0 3 0 0 0 0 0 0]
[3 3 3 0 0 0 0 0]
Nie muszę identyfikować położenia przylegania, tylko tego, czy istnieje z nie.
Obecnie nie mogę zrobić nic lepszego, niż znaleźć każdy element zerowy w macierzy, a następnie sprawdzić jego 4 elementy flankujące.
Dzięki za wszystkie wspaniałe odpowiedzi.
Bez opublikowania pełnej odpowiedzi, "numpy.diff" z parametrem osi to miejsce, od którego chciałbym zacząć. – Benjamin
Dzięki, które powinny znacznie zmniejszyć obszar wyszukiwania. –
Czy możesz dodać kod, który sprawdza każdy element. To może usunąć pewną niepewność dotyczącą testu. – hpaulj