python - 通过 python3 中连接的集群的多数投票进行标记

标签 python numpy machine-learning classification

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

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],])

将连接区域视为一个簇并计算标签的出现就足够了。我并不是在寻找任何机器学习方法。

最佳答案

您可以使用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]])

关于python - 通过 python3 中连接的集群的多数投票进行标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58607646/

相关文章:

python - 将路由添加到静态文件后 Flask API 非常慢

python - pytest_runtest_teardown 是否要求跳过测试而 pytest_runtest_setup 不是?

python - Python Pandas DataFrame 上的指数衰减

python numpy数组由整个数组索引

python - tflearn 创建多个模型

python - Matplotlib 堆叠直方图 numpy.ndarray 错误

python - numpy.unique 没有给出预期的输出

python-3.x - 为什么单层 MLP 在数字分类器中优于多层?

machine-learning - 为什么我们使用RMSE而不是平均残差作为模型的评估标准?

python - 与 Oauth 的 Django session - 无法通过 request.session 传递变量