我有一个对角线等于 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/