【问题标题】:Count outside edges of adjacent cells in a matrix in R计算R中矩阵中相邻单元格的外边缘
【发布时间】:2018-05-17 17:37:35
【问题描述】:

我正在处理一些网格化的温度数据,我已将其分类为一个矩阵,其中每个单元格都可以是两个类别之一 - 为简单起见,假设为 0 或 1。对于每个类,我想计算斑块统计数据,灵感来自FRAGSTATS,它在景观生态学中用于表征栖息地斑块的形状和大小。

就我而言,补丁是同一类的相邻单元的集群。这是一个示例矩阵,mat

mat <- 
matrix(c(0,1,0,
         1,1,1,
         1,0,1), nrow = 3, ncol  = 3, 
       byrow = TRUE)

0    1    0
1    1    1
1    0    1

mat 中的所有 1 形成一个补丁(我们将忽略 0),为了计算各种不同的形状指标,我需要能够计算周长(即外边缘的数量)。

编辑 抱歉,我显然无法发布图片,因为我没有足够的声誉,但您可以在下面 G5W 答案的黑线中看到 1 的外边界代表我所指的外边缘。

我可以手动计算 1 的补丁有 14 个外部边缘,并且我知道面积(即单元数)为 6。根据He et al.this other question 的论文,我已经弄清楚如何计算内边缘的数量(本例中为 5),但我真的很难为外边缘做同样的事情!我认为这与补丁形状与面积较小的最大整数正方形(在本例中为 2 x 2 正方形)相比的方式有关,但到目前为止,我的研究和思考都无济于事。

注意我知道包SDMTools,它可以计算各种FRAGSTATS 指标。不幸的是,返回的指标被处理得太多了,例如而不仅仅是聚合指数,我需要知道用于计算它的实际数字(观察到的共享边数/最大共享边数)。

这是我在这里的第一篇文章,所以我希望它足够详细!在此先感谢:)

【问题讨论】:

  • 14号是怎么得到的?甚至 5 个?
  • 数字 14 是我要计算的数字,我之前只是手动计算的(计算 G5W 答案中的黑线)。我通过计算相邻单元格具有相同值的实例数(基于this post)然后除以 2 来计算数字 5(G5W 答案中的红线)。

标签: r


【解决方案1】:

如果知道面积和内边数,就很容易计算外边数。每个补丁都有四个边,所以在某种程度上,边的总数是 4 * 面积。但这并不完全正确,因为每个内部边缘都在两个补丁之间共享。所以正确的总边数是

4*面积 - 内部

外边的数量是总边减去内边,所以

外部 = 总 - 内部 = (4*area- inside) - 内部 = 4*area - 2*inside。

您可以看到该区域由 6 个正方形组成,每个正方形有 4 个边。内部边缘(红色边缘)由两个相邻的正方形共享。

【讨论】:

  • 天哪,这很简单,现在看起来很明显!非常感谢:)
猜你喜欢
  • 2017-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多