【发布时间】:2018-06-27 22:18:06
【问题描述】:
我使用接受的答案in this question 来获取 2 维或更多维的 numpy 数组中的局部最大值,以便为它们分配标签。现在我还想根据梯度将这些标签分配给数组中的相邻单元格——即一个单元格与具有最高值的相邻单元格获得相同的标签。这样我可以迭代地将标签分配给我的整个数组。
假设我有一个数组 A like
>>> A = np.array([[ 1. , 2. , 2.2, 3.5],
[ 2.1, 2.4, 3. , 3.3],
[ 1. , 3. , 3.2, 3. ],
[ 2. , 4.1, 4. , 2. ]])
应用maximum_filter 我得到
>>> scipy.ndimage.filters.maximum_filter(A, size=3)
array([[ 2.4, 3. , 3.5, 3.5],
[ 3. , 3.2, 3.5, 3.5],
[ 4.1, 4.1, 4.1, 4. ],
[ 4.1, 4.1, 4.1, 4. ]])
现在,对于这个数组中的每个单元格,我希望得到过滤器找到的最大值的坐标,即
array([[[1,1],[1,2],[0,3],[0,3]],
[[2,1],[2,2],[0,3],[0,3]],
[[3,1],[3,1],[3,1],[3,2]],
[[3,1],[3,1],[3,1],[3,2]]])
然后我会使用这些坐标迭代地分配我的标签。
我可以使用循环在二维上做到这一点,忽略边框
highest_neighbor_coordinates = np.array([[(argmax2D(A[i-1:i+2, j-1:j+2])+np.array([i-1, j-1])) for j in range(1, A.shape[1]-1)] for i in range(1, A.shape[0]-1)])
但在看到scipy.ndimage 中的许多过滤器功能后,我希望有一个更优雅和可扩展(>=3 维)的解决方案。
【问题讨论】:
标签: python numpy multidimensional-array