如何对任意长度D的矩阵列表逐行多次应用Kronecker积?
动态适配任意D值的逐行Kronecker积实现需求
我现在碰到一个实际问题:我有一个长度为D的列表list0,列表里的每个元素都是N×T的矩阵。我需要逐行构建Kronecker积——简单说就是对每一行i(从1到N),计算list0[[D]][i,] %x% list0[[D-1]][i,] %x% ... %x% list0[[1]][i,],然后把这个结果放到dummy矩阵的第i列中。
目前我只能手动实现固定D值的情况,比如下面的示例代码就是D=4时的手动写法,但我想找到能适配任意D值的最优实现方法,不用每次改D都手动调整嵌套的Kronecker积代码。
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), nrow=N, ncol=T) } # 手动实现D=4时的逐行Kronecker积 for(i in 1:N){ dummy[,i] <- list0[[4]][i,] %x% list0[[3]][i,] %x% list0[[2]][i,] %x% list0[[1]][i,] }
核心需求就是:不管D取什么正整数,代码都能自动完成从list0[[D]]到list0[[1]]的逐行Kronecker积串联,不用手动写嵌套的%x%操作。
内容的提问来源于stack exchange,提问作者wolfsatthedoor
相关产品推荐
相关产品推荐

