首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反向下三角矩阵环

反向下三角矩阵环
EN

Stack Overflow用户
提问于 2016-11-30 22:00:12
回答 2查看 617关注 0票数 1

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

我的原始矩阵看起来类似于这样:

代码语言:javascript
复制
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

我有一个类似于此的向量:

代码语言:javascript
复制
 V
 .4
 .3
 .25
 .1

现在我想用这个向量填充下三角形,得到:

代码语言:javascript
复制
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函数,它会产生一个错误,所以我构建了一个循环,它只应该填充来自buttom的列:

代码语言:javascript
复制
o <- 5
c <- 2
s <- 1
for(s in (1:o)){  
 for(c in (2:o)){
   M[((o-s):o),c] <- V[1:c]}}

我的想法是像我手动写的那样向上移动:

代码语言:javascript
复制
M[(5-1):5,2] <- V[1:2]
M[(5-2):5,3] <- V[1:3] 

最好的办法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-30 22:25:52

要填充的矩阵的一部分是原始矩阵中关于行方向的下三角矩阵的反映,因此可以将rev函数应用于lower.tri()结果,以反转每一行以获得替换元素的索引,然后将其简单明了:

假设你有矩阵M和向量v

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2016-11-30 22:26:54

我们可以这样做:

定义一个包含要插入v值的完整矩阵。

代码语言:javascript
复制
N = matrix(rev(v), 4, 5)

现在,我们可以用替换矩阵中的相应值替换列大于行相反的M中的元素

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40899003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档