通过python3中已连接集群的多数表决进行标记

时间:2019-10-29 12:38:06

标签: python numpy machine-learning classification

我有一个具有三个维度和三个类的张量(0:背景,1:第一类,2:第二类)。我想通过执行多数表决来找到连接的集群并分配异常值的标签。一个二维示例:

import numpy as np

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

应更改为

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

将连接的区域视为一个群集就足以计算标签的出现。我不需要任何机器学习方法。

1 个答案:

答案 0 :(得分:1)

您可以使用scipy.ndimage.measurements.label查找连接的组件,然后使用np.bincount进行计数

from scipy.ndimage import measurements

lbl,ncl = measurements.label(data)

lut = np.bincount((data+2*lbl).ravel(),None,2*ncl+3)[1:].reshape(-1,2).argmax(1)+1
lut[0] = 0

lut[lbl]
# array([[0, 0, 0, 0, 0, 0, 0],
#        [0, 0, 0, 0, 0, 0, 0],
#        [0, 1, 0, 0, 0, 0, 0],
#        [1, 1, 1, 0, 0, 2, 2],
#        [1, 1, 0, 0, 2, 2, 2],
#        [0, 1, 0, 0, 0, 2, 0],
#        [0, 0, 0, 0, 0, 0, 0]])