沿矩阵的对角线设置值

乍得

我正在尝试使用matrix()diag()函数创建以下模式,但使用100 x 100矩阵而不是5 x 5。

5 x 5矩阵:

| 0 1 0 0 0 |
| 1 0 1 0 0 |
| 0 1 0 1 0 |
| 0 0 1 0 1 |
| 0 0 0 1 0 |

换句话说,我想有两个对角线,其值为1,一个在主对角线的左侧,另一个在主对角线的右侧。

红外光谱

diag()功能(实际上是该diag<-功能)可用于分配:

mat <- matrix( 0, 100,100)
diag(mat) <- 1
mat[1:10,1:10]
#-----------
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]    1    0    0    0    0    0    0    0    0     0
 [2,]    0    1    0    0    0    0    0    0    0     0
 [3,]    0    0    1    0    0    0    0    0    0     0
 [4,]    0    0    0    1    0    0    0    0    0     0
 [5,]    0    0    0    0    1    0    0    0    0     0
 [6,]    0    0    0    0    0    1    0    0    0     0
 [7,]    0    0    0    0    0    0    1    0    0     0
 [8,]    0    0    0    0    0    0    0    1    0     0
 [9,]    0    0    0    0    0    0    0    0    1     0
[10,]    0    0    0    0    0    0    0    0    0     1

但是,您希望为子对角线和超对角线分配值,因此请使用带有col和的逻辑表达式row

mat <- matrix( 0, 100,100)
mat[row(mat)==col(mat)-1] <- 1 
mat[row(mat)==col(mat)+1] <- 1
mat[1:10,1:10]
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]    0    1    0    0    0    0    0    0    0     0
 [2,]    1    0    1    0    0    0    0    0    0     0
 [3,]    0    1    0    1    0    0    0    0    0     0
 [4,]    0    0    1    0    1    0    0    0    0     0
 [5,]    0    0    0    1    0    1    0    0    0     0
 [6,]    0    0    0    0    1    0    1    0    0     0
 [7,]    0    0    0    0    0    1    0    1    0     0
 [8,]    0    0    0    0    0    0    1    0    1     0
 [9,]    0    0    0    0    0    0    0    1    0     1
[10,]    0    0    0    0    0    0    0    0    1     0

(此方法不依赖于具有正方形矩阵。我有一个模糊的记忆,即有一个不需要使用row的较快方法col。对于非常大的对象,这些函数中的每个函数都返回其参数尺寸相同的矩阵。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章