基于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
相关产品推荐
相关产品推荐

