You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

raster::focal搭配对角权重矩阵计算最小值结果异常问题

raster::focal对角矩阵权重计算最小值异常问题解决

问题原因

raster::focal对权重矩阵的默认处理逻辑为:权重矩阵中数值为0的位置对应的邻域像元,会被先乘以权重值(即变为0),再传入指定的统计函数。
你使用的5×5对角矩阵仅对角线位置权重为1,其余20个位置权重均为0,因此每次计算窗口最小值时,都会包含这20个0值,最终得到全0结果。而计算最大值时,栅格原始值均大于0,0值不会干扰最大值筛选,因此结果符合预期;列矩阵权重全为1,无0值参与计算,最小值结果也正常。

解决方法

若要实现仅统计邻域对角线位置像元的最小值,可使用以下两种方案:

  1. 将权重矩阵中不需要参与计算的位置设为NA,focal会自动忽略NA对应的像元:
# 构造对角权重矩阵,非对角位置替换为NA
w <- diag(1, nrow =5, ncol = 5)
w[w == 0] <- NA
r_min_d <- focal(r, w, fun = min, na.rm = TRUE)
  1. 自定义统计函数,直接筛选窗口内对角线元素计算最小值:
r_min_d <- focal(r, w = matrix(1, 5, 5), fun = function(x){
  # 提取5×5展平后向量的对角线位置元素(索引为1、7、13、19、25)
  diag_vals <- x[c(1, 7, 13, 19, 25)]
  return(min(diag_vals, na.rm = TRUE))
})

内容的提问来源于stack exchange,提问作者rm167

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 11:39:01