我有一个nx1的矩阵,我想在R中将其转换为一个nxn的对角矩阵。
R
中实现这个功能,那么方法如下:my.matrix <- matrix(0, nrow=4, ncol=4)
diag(my.matrix) <- rep(0.25, 4)
diag(c(orig_column_vector))
表示对原始列向量进行对角化。 - Ben Bolker正如@Ben Bolker所建议的那样,您可以使用diag
来简单定义您的单位矩阵:
my.matrix <- diag(0.25, 4)
my.matrix
## [,1] [,2] [,3] [,4]
## [1,] 0.25 0.00 0.00 0.00
## [2,] 0.00 0.25 0.00 0.00
## [3,] 0.00 0.00 0.25 0.00
## [4,] 0.00 0.00 0.00 0.25
这里有很多粗鲁和/或不太一般的答案,所以我想给你一个新的答案。我的教授和我将diag()
和Diag()
区分开来,其中diag()
将矩阵转换为向量,而Diag()
将向量转换为对角矩阵。幸运的是,diag()
已经在R中了。所以我们只需要为Diag()
创建一些东西。为此,我创建了以下函数:
Diag <- function(vec){
diag_matrix = diag(c(vec))
return(diag_matrix)
}
现在请记住,这假设你在R中的向量是一个nx1,也就是说它不是一个实际的R向量,而是一个有n行和1列的R矩阵。但如果我正确理解了你的问题,这应该可以解决它。只是...你知道的,晚了10年。也许有人还能用得上它!