Chcę obliczyć obwód danej struktury tablicy numpy. Z obwodem mam na myśli dokładny obwód struktury w tablicy numpy. Struktura może zawierać dziury.Obliczyć obwód numpy array
Mój obecny aproach jest coś takiego:
import numpy
a = numpy.zeros((6,6), dtype=numpy.int)
a[1:5, 1:5] = 1;a[3,3] = 0
# Way 1
s = ndimage.generate_binary_structure(2,1)
c = ndimage.binary_dilation(a,s).astype(a.dtype)
b = c - a
numpy.sum(b) # The result, however the hole is calculated as 1, although there are 4 edges
# Way 2
b = ndimage.distance_transform_cdt(a == 0,metric='taxicab') == 1
b = b.astype(int)
numpy.sum(b) # same as above
Jak widać to wyświetla wszystkie sąsiednie komórki, jednak suma z nich nie równa obwodzie plastra. Otwór w tablicy przykładowej jest obliczany jako 1, chociaż ma poprawnie 4 krawędzie. Są podobne problemy z większymi dziurami o różnych kształtach.
Zadawałem podobne pytania w przeszłości, ale wszystkie dostarczone rozwiązania, które w jakiś sposób nie rozwiązały się w prawidłowych wartościach wyjściowych na końcu. Ktoś ma pomysł, jak to zrobić? Nie ma innych pakietów niż numpy, scipy i pakiety podstawowe.
Jakiej wartości można się spodziewać w tym przykładzie? – Eric
Wartość całkowita. W powyższym zestawie danych testowych końcowa wartość powinna wynosić 20, ponieważ jest 20 krawędzi. – Curlew