r - 沿矩阵中的对角线设置值

标签 r matrix

我正在尝试使用 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

(这种方法不依赖于方阵。我有一个模糊的内存,有一种不需要使用 rowcol 的更快的方法。对于非常大的对象,这些函数中的每一个都返回一个矩阵与他们的论点具有相同的维度。)

关于r - 沿矩阵中的对角线设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54509990/

相关文章:

c++ - Eigen:沿一维复制项目,没有无用的分配

最大化矩阵的最小对角线元素的算法

objective-c - 如何在 Objective c 中转置矩阵?

r - 如何将 R Shiny 集成到当前应用程序中

r - 如何在ggplot中对颜色进行分组?

r - 使用effects包比较涉及来自ggplot2与base R的连续变量的交互效应图

c - 如何在 C 语言中使用#define 定义静态矩阵?

matlab - 将矩阵转换为堆叠向量,其中删除每行最后一个非零值之后的所有零

r - 为什么我需要在 Spark 中缩放之前组装矢量?

css - 不同地方的多个通知 Shiny 的应用程序