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

基于R语言计算25×25 0-1矩阵中1像素的最大垂直距离

解决25×25 0-1矩阵中1的最大垂直距离问题

嘿,刚上手R的话不用紧张,这个需求拆解开来其实很清晰~我给你一步步讲怎么实现,代码都给你写好,你直接替换自己的矩阵就行:

核心思路

垂直距离的本质是同一列中,最靠上的1所在行号 和 最靠下的1所在行号 的差值。我们需要遍历每一列计算这个差值,最后取所有列里的最大值。

具体步骤

1. 准备你的矩阵(或模拟测试用矩阵)

如果你已经有自己的25×25矩阵,直接用你的变量名就行;如果还没准备好,可以先生成一个随机的0-1矩阵来测试:

# 生成25×25的随机0-1矩阵
set.seed(123)  # 设置随机种子,让结果可重复
mat <- matrix(sample(c(0, 1), 25*25, replace = TRUE), nrow = 25, ncol = 25)

2. 提取每一列中所有1的行号

用apply函数按列遍历矩阵,找出每一列里值为1的行索引:

# 按列处理,得到每个列中1的行号列表
col_ones_rows <- apply(mat, 2, function(col) which(col == 1))

这个结果是一个列表,每个元素对应一列,里面存着该列所有1所在的行号(如果某列没有1,对应元素就是空的)。

3. 计算每一列的垂直距离

写一个小函数,用来计算单一列的垂直距离:

# 计算单一列的最大垂直距离
calc_col_distance <- function(row_nums) {
  if (length(row_nums) == 0) {
    return(0)  # 如果列里没有1,距离设为0;也可以用NA表示无数据
  }
  max(row_nums) - min(row_nums)
}

# 应用到所有列
all_col_distances <- sapply(col_ones_rows, calc_col_distance)

4. 找出最大垂直距离

最后取所有列距离里的最大值就搞定了:

max_vertical_distance <- max(all_col_distances)
print(max_vertical_distance)

小测试示例

比如用一个5×5的小矩阵验证:

test_mat <- matrix(
  c(0,1,0,0,0,
    0,1,0,1,0,
    0,0,0,1,0,
    0,1,0,1,0,
    0,0,1,0,0),
  nrow=5, ncol=5, byrow=TRUE
)

按上面的步骤计算,第2列的1在第2、4行,距离是2;第4列的1在第2、3、4行,距离是2;第3列的1在第5行,距离是0。所以最大距离是2,运行代码会得到正确结果。

注意点

  • R中矩阵的行号是从1开始的,所以最顶部是行1,最底部是行25,最大可能的垂直距离是24(行1到行25)。
  • 如果你的矩阵里全是0,结果会是0,你可以根据需求调整calc_col_distance函数里的返回值(比如改成NA)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 10:17:38