R语言使用for循环创建主/反对角线为2其余为0的10×10矩阵
R中使用for循环生成指定对角线矩阵的实现方法
核心逻辑
10×10矩阵的位置判定规则非常简单:
- 主对角线上的元素,行索引与列索引相等
- 反对角线上的元素,行索引与列索引之和为11(n=10时,第i行对应的反对角线列位置为
n+1 -i)
先初始化全0矩阵,再通过for循环遍历对应位置赋值为2即可。
代码实现
写法1:双层for循环(最直观的遍历写法)
完全按照逐行逐列遍历的逻辑实现,符合for循环的基础使用要求:
# 初始化10*10全0矩阵 a <- matrix(0, nrow = 10, ncol = 10) # 遍历每一行 for (i in 1:10) { # 遍历每一列 for (j in 1:10) { # 判定当前位置是否在主/反对角线上 if (i == j || i + j == 11) { a[i, j] <- 2 } } }
写法2:单层for循环(更简洁高效)
不需要逐列遍历,逐行处理时直接定位两个对角线位置赋值即可,同样满足for循环的要求:
a <- matrix(0, 10, 10) for (i in 1:10) { a[i, i] <- 2 # 主对角线赋值 a[i, 11 - i] <- 2 # 反对角线赋值 }
结果验证
运行上述任意一段代码后,输出的矩阵和你之前非循环方法得到的结果完全一致:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 2 0 0 0 0 0 0 0 0 2 [2,] 0 2 0 0 0 0 0 0 2 0 [3,] 0 0 2 0 0 0 0 2 0 0 [4,] 0 0 0 2 0 0 2 0 0 0 [5,] 0 0 0 0 2 2 0 0 0 0 [6,] 0 0 0 0 2 2 0 0 0 0 [7,] 0 0 0 2 0 0 2 0 0 0 [8,] 0 0 2 0 0 0 0 2 0 0 [9,] 0 2 0 0 0 0 0 0 2 0 [10,] 2 0 0 0 0 0 0 0 0 2
内容的提问来源于stack exchange,提问作者plonthe
相关产品推荐
相关产品推荐

