在numpy数组中给定值的凸壳 - python 2.7

时间:2018-06-06 08:43:20

标签: python arrays numpy convex-hull

对于给定的数组(如下所示)和给定值(此处为0),我想计算在同一个凸包上可以关联多少0。

数组:

1 2 4 5 8 9 7
4 0 0 7 5 6 8
6 5 0 4 3 5 2
1 0 0 5 7 0 6
2 3 5 7 8 9 4

对于建议的数组,解决方案应该得到:[5, 1],因为在第二行和第四行以及第二/第三列之间可以识别出五个0的第一个“模式”。存在仅有一个0的第二个模式。

你知道怎么做到这一点吗?我知道如何计算0的数量。也许我可以用numpy数组的掩码选项做点什么?

致以最诚挚的问候,谢谢你的帮助,

1 个答案:

答案 0 :(得分:2)

您正在寻找的是阵列中的“连接组件”。 Scipy有一个方便的label功能:

import numpy as np
from scipy.ndimage.measurements import label

a = np.array([
    [1, 2, 4, 5, 8, 9, 7],
    [4, 0, 0, 7, 5, 6, 8],
    [6, 5, 0, 4, 3, 5, 2],
    [1, 0, 0, 5, 7, 0, 6],
    [2, 3, 5, 7, 8, 9, 4],])

labs, n_components = label(a==0)

component_sizes = [np.sum(labs==i) for i in range(1, n_components+1)]

print(component_sizes)

打印[5, 1]