我有一个numpy数组:
a = np.array([[0,4,3,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10],
[4,4,3,5,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10],
[4,8,3,9,2,6,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10],
[4,2,2,9,2,6,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10],
[4,4,2,9,2,6,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10],
[4,2,2,2,2,8,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10],
[4,2,2,2,6,8,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10],
[4,2,2,2,6,8,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10],
[4,2,2,2,6,8,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10],
[4,2,2,2,6,8,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10],
[4,2,2,2,6,8,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10],
[4,2,2,9,2,6,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10],
[4,2,2,2,6,8,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10],
[4,4,2,2,6,8,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10],
[4,4,4,3,4,4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10],
[4,4,4,3,4,4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]])
我正在寻找单元格中最小的neighbours的索引,其中value= 2
(numpy.where(a==value)
)但大于value
。我还需要相应单元格的索引=value
,我们为其找到了最小的邻居。你知道吗
在这种情况下(value = 2
)的结果应该是:
邻近细胞指数:[0,2]
和[4,3]
相应的和
相应细胞的索引:[1,2]
和[3,3]
如果问题不太清楚,请道歉。你知道吗
到目前为止,我的情况是:
import numpy as np
value = 2
neighbors = np.zeros(4, dtype = np.float)
fdx = np.flatnonzero(a== value)
locations = fdx // a.shape[1], fdx % a.shape[1]
maximums = []
for item in zip(*locations):
i, j = item[0], item[1]
neighbors[0], neighbors[1], neighbors[2],neighbors[3] = [a[i-1,j], a[i+1,j], a[i,j-1], a[i,j+1]]
maximums.append(min(neighbors[neighbors> value]))
print np.where(a==min(maximums))
prints: (array([0, 4]), array([2, 3]))
这是非常缓慢的,也仍然不知道如何找到相应的细胞指数。任何与我的解决方案完全不同的解决方案也将被接受。你知道吗
不确定这要快多少(如果有的话),但它找到了相应的单元格。你知道吗
您可以使用
scipy.ndimage.morphology.binary_dilation
查找邻居从previous answer使用
window_nd
它的作用是:
val
的a
上创建滑动窗口(因此窗口形状是(*a.shape, 3, 3)
)val
的所有窗口中查找大于val
的最小值(填充允许边的聚焦),并将其分配给min_val
neig_mask
将相邻对象限制为基数方向min_val
位于neig_mask
位置且val
位于中心的窗口,分配给rev_mask
val
位于neig_mask
位置且min_val
位于中心的窗口,分配给min_mask
返回
min_mask
和rev_mask
中的np.nonzero
,这些元组可以用作a
上的索引相关问题 更多 >
编程相关推荐