r语言 - 由向量生成对称矩阵



我必须将向量转换成矩阵

x<-c(1:5)
mat<-matrix(nrow=3, ncol=3)
for (i in 1:3){
for (j in 1:3){
if (i==j) {
mat[i,j]<-x[3]
} else 
if (i < j) { ##for upper diagonal
mat[i,j]<-x[j]
}
}
}

得到的矩阵应为

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

我知道它是一种toeplitz矩阵,并且在R中有可用的包,但我必须使用嵌套的for循环来完成。

这可以用toeplitz完成,函数来自base R,即不需要包

`diag<-`(toeplitz(x)[-(2:3), 1:3], 1)
[,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    1    2
[3,]    5    4    1

关于嵌套循环,一个选项是

x <- c(1:5)
mat <- matrix(nrow=3, ncol=3)
for (i in 1:3){
for (j in 1:3){
if (i==j) {
mat[i,j]<-x[1]
} else if (i > j) { 
if((i + j) < length(x)){
mat[i,j] <- x[(i + j + 1)]
} else {
mat[i, j] <- x[(i + j) - 1]
}  
} else {
if((i + j) < length(x)) {
mat[i, j] <- x[j]
} else {
mat[i, j] <- x[i]
}
}
}
}

与产出

> mat
[,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    1    2
[3,]    5    4    1

最新更新