Python 二维阵列中边界的numpy检测

Python 二维阵列中边界的numpy检测,python,numpy,plotly,classification,Python,Numpy,Plotly,Classification,我有矩阵(如下),它表示类(e.x.0,1,2)。我正在使用热图用plotly(python)绘制它,我找不到任何函数可以给我类边界的坐标 array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 2, 2], [1, 1, 1, 2, 2, 2, 2, 2, 2, 2], [2, 2, 2, 2, 2, 2

我有矩阵(如下),它表示类(e.x.0,1,2)。我正在使用热图用plotly(python)绘制它,我找不到任何函数可以给我类边界的坐标

array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1, 1, 1, 1, 2, 2],
       [1, 1, 1, 2, 2, 2, 2, 2, 2, 2],
       [2, 2, 2, 2, 2, 2, 2, 2, 0, 0],
       [2, 2, 2, 2, 2, 2, 2, 0, 0, 0],
       [2, 2, 2, 2, 2, 0, 0, 0, 0, 0],
       [2, 2, 2, 2, 0, 0, 0, 0, 0, 0],
       [2, 2, 2, 0, 0, 0, 0, 0, 0, 0],
       [2, 2, 2, 0, 0, 0, 0, 0, 0, 0]])
下面的黑线是边框,你能给一些提示,让它以python高效的方式计算吗?检查数组中的每个元素及其相邻元素的速度非常慢

upd。我还尝试在plotly contour plot中查找,但线条的形状具有插值,因此它看起来不像上面的exmaple…

可以用于查找阵列中的组件。由于
0
被视为“背景”,因此必须将标签更改为另一个标签,例如最大值+1。这将为您提供具有坐标的切片元组

如果具有相同标签的块不一定“附着”,或在同一组件中,则需要添加标签。否则,您可以直接使用
regionprops
查找切片

from skimage.measure import label, regionprops

a[a==0]=a.max()+1
l = label(a)
for s in regionprops(l):
    print(s.slice)
(slice(0, 4, None), slice(0, 10, None))
(slice(2, 10, None), slice(0, 10, None))
(slice(4, 10, None), slice(3, 10, None))
输入数据:

a = np.array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1, 1, 1, 1, 2, 2],
       [1, 1, 1, 2, 2, 2, 2, 2, 2, 2],
       [2, 2, 2, 2, 2, 2, 2, 2, 0, 0],
       [2, 2, 2, 2, 2, 2, 2, 0, 0, 0],
       [2, 2, 2, 2, 2, 0, 0, 0, 0, 0],
       [2, 2, 2, 2, 0, 0, 0, 0, 0, 0],
       [2, 2, 2, 0, 0, 0, 0, 0, 0, 0],
       [2, 2, 2, 0, 0, 0, 0, 0, 0, 0]])

答案对sergey有帮助吗?是的,非常感谢你的解决方案!