私は与えられたベクトルを持っていて、それをあるブロック行列に変換したいと思っています。この単純な例を考えてみましょう:ベクトルをブロック行列
k <- c(1,2,3)
a <- rep(apply(expand.grid(k, k), 1, prod), each=3)
a
[1] 1 1 1 2 2 2 3 3 3 2 2 2 4 4 4 6 6 6 3 3 3 6 6 6 9 9 9
このベクターは、フォームのブロック行列に並んでする必要があります。
rbind(
cbind(diag(a[1:3]), diag(a[4:6]), diag(a[7:9])),
cbind(diag(a[10:12]), diag(a[13:15]), diag(a[16:18])),
cbind(diag(a[19:21]), diag(a[22:24]), diag(a[25:27]))
)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 1 0 0 2 0 0 3 0 0
[2,] 0 1 0 0 2 0 0 3 0
[3,] 0 0 1 0 0 2 0 0 3
[4,] 2 0 0 4 0 0 6 0 0
[5,] 0 2 0 0 4 0 0 6 0
[6,] 0 0 2 0 0 4 0 0 6
[7,] 3 0 0 6 0 0 9 0 0
[8,] 0 3 0 0 6 0 0 9 0
[9,] 0 0 3 0 0 6 0 0 9
は今、これは当然のことながら、小型で簡単な例であり、私はこれをやりたいですはるかに大きなベクトル/行列。したがって、私の質問:特定の形式のブロック行列(ループなし)でベクトルを配置する一般的な方法はありますか?
おそらく関連する投稿:https://stackoverflow.com/questions/17495841/block-diagonal-binding-of-matrices – zx8754