假设我有一个具有相同维度的矩阵列表 . 例如:
mat = matrix(c(1,2,3,11,12,13,21,22,23), nrow = 3, ncol = 3)
mat.list = rep(list(mat), 3)
mat.list[[2]] = mat.list[[2]]*2.5
mat.list[[3]] = mat.list[[3]]*3.5
我想要的是填充尺寸长度(mat.list)* nrow(mat)长度(mat.list)* ncol(mat)的超级矩阵 - 可能初始化如下:
super.mat = matrix(NA, nrow = length(mat.list)*nrow(mat), ncol = length(mat.list)*ncol(mat))
根据这条规则:super.mat [N *(i-1)n,N *(j-1)n] = mat.list [[n]] [i,j]
哪里:
N = length(mat.list)
i和j表示 mat.list
中矩阵n中的行和列索引
我认为有以下几点:
populateMat = function(N, n, i, j, mat, super.mat){
super.mat[N*(i-1)+n,N*(j-1)+n] = mat[i,j]
}
结合 mat.list
上的一些应用函数执行:
outer(1:nrow(mat), 1:ncol(mat), Vectorize(function(i,j) populateMat(N,1,i,j,mat,super.mat)))
这里 mat
只是 mat.list
中的一个元素,应该可以工作,但显然我需要一些帮助来实际使其工作 .
2 回答
一旦你意识到它只是块对角矩阵的重新排列,你可以想出这样的东西:
以下是否符合您的需求?:
结果: