问题描述
所以我有一个矩阵(n行乘m列),希望找到具有最多连接的"1"的区域。例如,如果我有以下矩阵:
1 1 0 0
0 1 1 0
0 0 1 0
1 0 0 0
矩阵中有两个"1"区域。
第一区域:
1 1
1 1
1
第二区域:
1
我想创建一个将输出最大值=5的算法。我认为这与深度优先搜索有关,但我只有基本R和访问少数几个包的权限。
推荐答案
您可以使用SDMTools
。首先,我们将矩阵转换为raster
,然后检测clump
个(补丁)的连通单元。每个束都有一个唯一的ID。NA和零被用作背景值。最后,PatchStat
提供每个补丁的统计信息。
library(raster)
library(SDMTools)
r <- raster(mat)
rc <- clump(r)
as.matrix(rc)
[,1] [,2] [,3] [,4] [,5]
[1,] NA 1 1 1 1
[2,] 1 NA NA 1 NA
[3,] 1 1 1 NA 1
[4,] NA NA NA NA NA
[5,] 2 2 NA NA NA
p <- PatchStat(rc)
max(p$n.cell)
[1] 10
样本数据
set.seed(2)
m <- 5
n <- 5
mat <- round(matrix(runif(m * n), m, n))
mat
[,1] [,2] [,3] [,4] [,5]
[1,] 0 1 1 1 1
[2,] 1 0 0 1 0
[3,] 1 1 1 0 1
[4,] 0 0 0 0 0
[5,] 1 1 0 0 0