如何使用R语言创建非对角线/移动窗口矩阵?
用R语言创建移动窗口(非对角线)矩阵
我们可以自定义一个offdiag()函数来生成这种每行包含连续1的移动窗口矩阵,函数参数说明:
- k: 每行连续1的个数(窗口大小)
- n: 矩阵的行数
- m: 矩阵的列数
函数实现代码
offdiag <- function(k, n, m) { # 初始化全0矩阵 mat <- matrix(0, nrow = n, ncol = m) # 遍历每一行填充连续的1 for (i in 1:n) { start <- i end <- i + k - 1 # 确保结束位置不超过列数 if (end <= m) { mat[i, start:end] <- 1 } } return(mat) }
示例调用与结果
执行offdiag(3, 4, 6)后,输出如下:
> offdiag(3, 4, 6) [,1] [,2] [,3] [,4] [,5] [,6] [1,] 1 1 1 0 0 0 [2,] 0 1 1 1 0 0 [3,] 0 0 1 1 1 0 [4,] 0 0 0 1 1 1
逻辑说明
- 先创建指定行列数的全0矩阵作为基础
- 对每一行,计算当前行中1的起始位置(等于行号)和结束位置(行号+窗口大小-1)
- 若结束位置不超过总列数,就将对应列的元素设为1,超出则保持0
内容的提问来源于stack exchange,提问作者monotonic
相关产品推荐
相关产品推荐

