r - 创建一个整数相似矩阵,使用 R

标签 r matrix

我有一个对角线等于 0 和非对角线都等于 1 的矩阵(单位矩阵的逆矩阵):

mat1 <- matrix(c(0,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0), 5, 5)

我还有一个向量,它的长度总是与矩阵的维度相同,并且总是从零开始:
vec1 <- c(0,1,2,3,4)

使用这两个对象,我想创建一个如下所示的矩阵:
mat2 <- matrix(c(0,1,2,3,4,1,0,1,2,3,2,1,0,1,2,3,2,1,0,1,4,3,2,1,0), 5, 5)

     [,1] [,2] [,3] [,4] [,5]
[1,]    0    1    2    3    4
[2,]    1    0    1    2    3
[3,]    2    1    0    1    2
[4,]    3    2    1    0    1
[5,]    4    3    2    1    0

我想要一个可以泛化的操作,例如,如果我有一个 9 x 9 的矩阵和一个 0:8 的向量,我可以获得等效的结果。关于如何解决这个问题的任何想法?

最佳答案

由于 vec1 以零开头,因此您可以执行以下操作:

MakeMatrix <- function(x){
  n <- length(x)
  id <- abs(rep(1:n,n)-rep(1:n,each=n)) + 1
  matrix(x[id],ncol=n)
}

MakeMatrix(vec1)

所以没有必要在输入中使用 mat1,因为那个实际上是多余的。您可以在函数内构造矩阵。

诀窍是提供一系列 id 值以从向量中选择,然后将所有内容转换为矩阵。

编辑:如果您只想使用序列,您也可以这样做:
MakeMatrix <- function(n){
  id <- abs(rep(1:n,n)-rep(1:n,each=n))
  matrix(id,ncol=n)
}

MakeMatrix(7)

关于r - 创建一个整数相似矩阵,使用 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5718399/

相关文章:

r - 如何使用随机游走算法计算介数?

mysql - 如何安全地转义 R 中的引号以将文本提交给 SQL?

删除了 geom_bar 直方图中的数据点

c++ - 将世界、 View 和投影矩阵传递给 Direct3D 中的着色器

r - 我怎样才能使矩阵和向量的处理规则化(例如,在 Matlab 中)

java - 带有 Tor 的 RSelenium 以及 Windows 上的新 RSelenium 版本

r - 将数据框中的每个列表转换为普通列

python - 寻找任意矩阵 n*n 的上/下三角形式 - python

ruby - Ruby 是否有数据库或数据结构来实现关系矩阵?

java - 在Java中,从CSV读取具有命名行和命名列的矩阵