這是由此solution產生的後續問題。 除非在數組中有多個修補程序,否則對相鄰單元格進行計數的解決方案工作得很好。numpy陣列中多個單元格貼片的相鄰單元
所以這次這個數組看起來像這樣。
import numpy
from scipy import ndimage
s = ndimage.generate_binary_structure(2,2)
a = numpy.zeros((6,6), dtype=numpy.int) # example array
a[1:3, 1:3] = 1;a[2:4,4:5] = 1
print a
[0 0 0 0 0 0]
[0 1 1 0 0 0]
[0 1 1 0 1 0]
[0 0 0 0 1 0]
[0 0 0 0 0 0]
[0 0 0 0 0 0]
# Number of nonoverlapping cells
c = ndimage.binary_dilation(a,s).astype(a.dtype)
b = c - a
numpy.sum(b) # returns 19
# However the correct number of non overlapping cells should be 22 (12+10)
是否有任何聰明的解決方案來解決這個困境,而不使用任何循環或迭代通過數組?原因是陣列可能相當大。
思路1:
只是想在它和辦法做到這一點可能是檢查的迭代結構中一個以上的補丁。爲了使總計數正確,下面的單元在擴張中必須等於2(或更多)。任何人都知道如何將這個想法變成代碼?
[1 1 1 1 0 0]
[1 0 0 2 1 1]
[1 0 0 2 0 1]
[1 1 1 2 0 1]
[0 0 0 1 1 1]
[0 0 0 0 0 0]
你得到的是不重疊的單元格嗎?你是否真的希望每個補丁都單獨使用它們? IE瀏覽器。如果你在你的'a'上添加'a [1,3:5] = 1',你甚至會想要什麼? – seberg
請參閱其他問題的答案。上面的數組僅僅是一個例子。我真正的數組非常大,幷包含許多值的單元格修補程序 – Curlew
我很困惑,因爲您指出'scipy.signal.convolve2d'解決了您以前的問題 - 但是它計算所有重疊值。現在看來你不希望重疊計數,只有當這些重疊是由非連續的'1'塊產生時。這是完全不同的要求。所以你之前的問題並沒有真正解釋你現在想要的。 – senderle