【发布时间】:2018-04-28 19:34:27
【问题描述】:
假设我有一个长度为D 的列表list0,其中每个元素都是一个矩阵N x T。
我正在尝试创建一个 Kronecker 产品,逐行执行以下操作。
for(i in 1:N){
dummy[,i] <- list0[[D]][i,] %x% ...( (list0[[2]][i,] %x% list0[[1]][i,]))
}
有谁知道应用此功能的最聪明的方法?下面是我手动输入的示例,但我想要任意 D。
set.seed(1)
N = 2
T = 3
D = 4
dummy = matrix(0,(T)^D,N)
list0 = list()
for(d in 1:D) {
list0[[d]] <- matrix(rnorm(N*T,0,1),N,T)
}
for(i in 1:N){
dummy[,i] <- list0[[4]][i,] %x% (list0[[3]][i,] %x% (list0[[2]][i,] %x% list0[[1]][i,]))
}
head(dummy)
[,1] [,2]
[1,] 0.15578313 -0.1783412
[2,] 0.20779959 -1.5492222
[3,] -0.08194020 0.7967800
[4,] 0.18402067 0.0737661
[5,] 0.24546573 0.6407946
[6,] -0.09679284 -0.3295669
【问题讨论】:
-
编辑:我的简单解决方案是将每个 kronecker 存储在一个单独的列表中,然后在 D>2 之后对其进行迭代,然后将其插入最终矩阵。不过可能有更聪明的解决方案。
标签: r list function apply cross-product