我有一个向量说
a = c(1,2,3,4,5,6)
我想把它们组织成一个上三角矩阵的元素(不考虑对角元素,它们都是零)按行。我的目标是得到以下矩阵:
[,1] [,2] [,3] [,4]
[1,] 0 1 2 3
[2,] 0 0 4 5
[3,] 0 0 0 6
[4,] 0 0 0 0
但是下面的方法是,用这个向量替换对角线元素,但是按列赋值。比如说
b= matrix(0, 4, 4)
b[upper.tri(b, diag=FALSE)]=a
它会给予下面的矩阵
[,1] [,2] [,3] [,4]
[1,] 0 1 2 4
[2,] 0 0 3 5
[3,] 0 0 0 6
[4,] 0 0 0 0
原因是当R给矩阵赋值时,默认情况下,它会按列赋值。我想知道是否有一个简单的方法来解决我的问题,而无需编写for循环。
我发现了一个类似的帖子之前与我的问题,但它没有解释赋值给一个上三角矩阵的行:
creating a triangular matrix
先谢谢你了!
3条答案
按热度按时间42fyovps1#
这里有一个选择
或者,根据需要重新排序
a
,并将其分配到右上角三角形中:sbdsn5lh2#
请注意,要填充一个非对称矩阵,您可以首先通过上面所示的代码填充上面的三角形,然后用一个不同的向量(不需要转置)填充下面的三角形。
ki0zmccv3#
尝试在不使用lower.tri()的情况下实现这个:
我不知道如何使用提供的向量来确定矩阵的大小。