【问题标题】:generating numerical clusters from matrix values of a minimal size从最小尺寸的矩阵值生成数值簇
【发布时间】:2014-09-09 15:46:32
【问题描述】:

我有一个 1 和 0 的矩阵。我想做的是将具有 1 的单元格分组,并计算矩阵中存在的簇的数量以及这些簇的大小。

如果 n 个(在这种情况下,至少有 4 个值为 1 的像元彼此靠近)的 1 彼此靠近(彼此立即向上、向下、向左或向右,则将它们视为单个簇并输出簇的数量及其大小。

例如矩阵如下所示:

> m 

      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    1    0    0    0    0    0    0    0    0     0
[2,]    1    1    1    0    0    0    0    0    0     0
[3,]    0    0    1    0    0    0    0    0    0     0
[4,]    0    0    1    0    0    0    0    0    0     0
[5,]    0    0    1    0    0    0    0    1    1     0
[6,]    0    0    0    0    0    0    0    0    1     1

这个矩阵的簇数是 2 个簇。一组 7 个 1 和另一组 4 个 1。我在试图让它工作时遇到了很多麻烦,似乎无法弄清楚。

输出可以像这样简单:

> output
cluster  size
     1      7
     2      4

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    您可以使用 SDMTools 包中的函数 ConnCompLabel 来标记二进制矩阵中的连通分量:

    R> ConnCompLabel(m)
         [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
    [1,]    1    0    0    0    0    0    0    0    0     0
    [2,]    1    1    1    0    0    0    0    0    0     0
    [3,]    0    0    1    0    0    0    0    0    0     0
    [4,]    0    0    1    0    0    0    0    0    0     0
    [5,]    0    0    1    0    0    0    0    2    2     0
    [6,]    0    0    0    0    0    0    0    0    2     2
    
    R> tab <- table(ConnCompLabel(m))[-1]
    R> tab[tab >= 4]
    
    1 2 
    7 4 
    

    【讨论】:

    • 我似乎找不到让 ConnCompLabel 允许我定义我想要的集群大小的方法。我的意思是,如果我想要特定大小的集群,例如大小 3,而不是每次都选择最大的集群路径。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 2017-07-21
    相关资源
    最近更新 更多