R-逆下三角矩阵环

R-逆下三角矩阵环,r,matrix,triangular,R,Matrix,Triangular,我试图用一个预填充向量V填充矩阵M的下对角线 我的原始矩阵与此类似: M = matrix(c(.3,.2,.1,0), nrow=4, ncol=5) M 1 2 3 4 5 1 .3 .3 .3 .3 .3 2 .2 .2 .2 .2 .3 3 .1 .1 .1 .1 .1 4 0 0 0 0 0 V .4 .3 .25 .1 我有一个类似的向量: M = matrix(c(.3,.2,.1,0), nrow=4, ncol=5) M 1 2 3

我试图用一个预填充向量V填充矩阵M的下对角线

我的原始矩阵与此类似:

M = matrix(c(.3,.2,.1,0), nrow=4, ncol=5)

M  1  2  3  4 5
1 .3 .3 .3 .3 .3
2 .2 .2 .2 .2 .3
3 .1 .1 .1 .1 .1
4 0  0  0  0   0
 V
 .4
 .3
 .25
 .1
我有一个类似的向量:

M = matrix(c(.3,.2,.1,0), nrow=4, ncol=5)

M  1  2  3  4 5
1 .3 .3 .3 .3 .3
2 .2 .2 .2 .2 .3
3 .1 .1 .1 .1 .1
4 0  0  0  0   0
 V
 .4
 .3
 .25
 .1
现在我想用这个向量填充下面的三角形,得到:

0  1  2  3  4  5
1 .3 .3 .3 .3 .1
2 .2 .2 .2 .25 .25
3 .1 .1 .3 .3 .3 
4 0  .4 .4 .4 .4
如果我使用
lower.tri
函数,它会给出一个错误,因此我构建了一个循环,该循环只会填充从按钮向上的列:

o <- 5
c <- 2
s <- 1
for(s in (1:o)){  
 for(c in (2:o)){
   M[((o-s):o),c] <- V[1:c]}}

o您要填充的矩阵部分是原始矩阵的下三角矩阵相对于行方向的反映,因此您可以对
lower.tri()
结果应用
rev
函数来反转每一行,以获得替换元素的索引,这样就很简单了:

假设有矩阵
M
和向量
v

M
#   X1  X2  X3  X4  X5
#1 0.3 0.3 0.3 0.3 0.3
#2 0.2 0.2 0.2 0.2 0.3
#3 0.1 0.1 0.1 0.1 0.1
#4 0.0 0.0 0.0 0.0 0.0

v
# [1] 0.40 0.30 0.25 0.10

lowerIndex = t(apply(lower.tri(M, diag = TRUE), 1, rev))
M[lowIndex] <- (lowIndex * rev(v))[lowIndex]
M

#   X1  X2  X3   X4   X5
#1 0.3 0.3 0.3 0.30 0.10
#2 0.2 0.2 0.2 0.25 0.25
#3 0.1 0.1 0.3 0.30 0.30
#4 0.0 0.4 0.4 0.40 0.40
M
#x1x2x3x4x5
#1 0.3 0.3 0.3 0.3 0.3
#2 0.2 0.2 0.2 0.2 0.3
#3 0.1 0.1 0.1 0.1 0.1
#4 0.0 0.0 0.0 0.0 0.0
v
# [1] 0.40 0.30 0.25 0.10
lowerIndex=t(应用(lower.tri(M,diag=TRUE),1,rev))
M[低指数]我们可以这样做:

使用要插入的v值定义完整矩阵

N = matrix(rev(v), 4, 5)
现在,我们可以用替换矩阵中的相应值替换M中列大于行倒数的元素

R = rev(row(M))
C = col(M)
M[C>R] = N[C>R]

     # [,1] [,2] [,3] [,4] [,5]
# [1,]  0.3  0.3  0.3 0.30 0.10
# [2,]  0.2  0.2  0.2 0.25 0.25
# [3,]  0.1  0.1  0.3 0.30 0.30
# [4,]  0.0  0.4  0.4 0.40 0.40