从矢量制作对称矩阵
Make symmetric matrix from vector
我必须将向量转换成矩阵
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
我必须将向量转换成矩阵
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