如何将一个n*1矩阵转换为一个n*n对角矩阵

5
我有一个nx1的矩阵,我想在R中将其转换为一个nxn的对角矩阵。

Bison,谷歌身份矩阵,你应该删除这个问题,它看起来不属于这个网站。 - user2737555
问题不够清晰。如果您想知道如何使用软件来完成此操作,您需要指定编程语言(这个问题应该在 Stack Overflow 上提问)。如果您想知道如何将向量相乘等操作以获得结果,则应该在 math.SE 上提问。 - gung - Reinstate Monica
4个回答

4
如果你只是想知道如何在R中实现这个功能,那么方法如下:
my.matrix       <- matrix(0, nrow=4, ncol=4)
diag(my.matrix) <- rep(0.25, 4)

4
更一般地说,diag(c(orig_column_vector)) 表示对原始列向量进行对角化。 - Ben Bolker

4

正如@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

谢谢Maetheran,结果只需要一行简单的步骤,再次感谢你的帮助,你们太棒了。 - bison2178

2
在您的情况下,原始向量包含相同元素,只需按照注释建议将n x n单位矩阵乘以0.25即可。
但是对于非相同元素的向量,更有趣的是:
n x 1列向量表示为v = (v_1,...,v_n)'。 然后,定义n x n矩阵E_i为在其[i,i]元素中具有1,其他位置均为零的矩阵。同时定义n x 1列向量e_i为在[i]位置(行)具有1,其他位置均为零的向量。
n x n矩阵V = diag(v_1,...,v_n)可以得到

V = Σ(E_i v e_i')

其中求和为 i=1,...n

0

这里有很多粗鲁和/或不太一般的答案,所以我想给你一个新的答案。我的教授和我将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年。也许有人还能用得上它!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接