我想构造一个矩阵(其中A是一个实矩阵,我是单位矩阵):
我不想使用for循环。我尝试过这样的事情:
sequence = 1:T
sapply(sequence, function(i) matrix(A%^%(i-1)))
但失败了。我想在图片中创建第一个矩阵列并继续以对角线方式复制计算矩阵,但我不知道如何实现这一点。
修改:对于我所造成的麻烦,我感到非常抱歉。以下是我在快速而肮脏的循环中寻找的内容
library("expm")
n<-5
A<-matrix(1, 2, 2)
output <- matrix(0, 5*2, 5*2)
for (i in 1:5) {
for (j in i:1) {
output[(2*(i-1)+1):(2*i),(2*(j-1)+1):(2*j)] = A %^% (i-j)
}
}
答案 0 :(得分:1)
我想出了别的东西:
library("expm")
n<-5
A<-matrix(1, 2, 2)
output <- matrix(0, 5*2, 5*2)
output2 <- matrix(0, 5*2, 5*2)
start.time <- Sys.time()
for(dummy in 1:2000){
for (i in 1:5) {
for (j in i:1) {
output[(2*(i-1)+1):(2*i),(2*(j-1)+1):(2*j)] = A %^% (i-j)
}
}
}
end.time <- Sys.time()
time.taken <- end.time - start.time
time.taken
start.time <- Sys.time()
for(dummy in 1:2000){
for (i in 1:5) {
output2[(2*(i-1)+1):(2*i),1:2] = A %^% (i-1)
}
rowLength = dim(output2)[1]
for (i in 2:5) {
output2[(2*i-1):rowLength,(2*i-1):(2*i)] = output2[1:(rowLength-(2*(i-1))),1:2]
}
}
end.time <- Sys.time()
time.taken <- end.time - start.time
time.taken
这(平均)速度稍微快一点,但我认为使用一些内置的功能魔法,结果会更好。也许有人可以帮忙吗?
答案 1 :(得分:0)
您是否一直关注https://stat.ethz.ch/R-manual/R-devel/library/base/html/lower.tri.html上记录的lower.tri(x, diag = TRUE)
?
我已经举例说明了如何应用它here
步骤如下:
A <- matrix(1:25, 5, 5) # construct the initial matrix
B <- A * lower.tri(A) # convert A to a lower triangular matrix of booleans (with TRUE below diagonal, FALSE from diagonal and up)
B <- B * A + diag(5) # construct the final result
B