1つのオプションは、各データフレームの行を適切なパターンで複製し、それらを一緒に掛けることです。
データ:
(A <- matrix(1:6, 3))
# [,1] [,2]
# [1,] 1 4
# [2,] 2 5
# [3,] 3 6
(B <- matrix(2:5, 2))
# [,1] [,2]
# [1,] 2 4
# [2,] 3 5
(C <- matrix(3:8, 3))
# [,1] [,2]
# [1,] 3 6
# [2,] 4 7
# [3,] 5 8
Aの各行は、Bのすべての行のための十分な時間を複製しなければならないが、Cのすべての行とペア:Bの
A[rep(seq_len(nrow(A)), each=nrow(B)*nrow(C)),]
# [,1] [,2]
# [1,] 1 4
# [2,] 1 4
# [3,] 1 4
# [4,] 1 4
# [5,] 1 4
# [6,] 1 4
# [7,] 2 5
# [8,] 2 5
# [9,] 2 5
# [10,] 2 5
# [11,] 2 5
# [12,] 2 5
# [13,] 3 6
# [14,] 3 6
# [15,] 3 6
# [16,] 3 6
# [17,] 3 6
# [18,] 3 6
行はすべてのために複製される必要がありますこのパターンはAのすべての行に対して再度コピーする必要があります。
B[rep(rep(seq_len(nrow(B)), each=nrow(C)), nrow(A)),]
# [,1] [,2]
# [1,] 2 4
# [2,] 2 4
# [3,] 2 4
# [4,] 3 5
# [5,] 3 5
# [6,] 3 5
# [7,] 2 4
# [8,] 2 4
# [9,] 2 4
# [10,] 3 5
# [11,] 3 5
# [12,] 3 5
# [13,] 2 4
# [14,] 2 4
# [15,] 2 4
# [16,] 3 5
# [17,] 3 5
# [18,] 3 5
BのすべてのAの行と行のために一度繰り返されるように:これも困難に多くのkronecker
のようなものよりもタイピングとは
A[rep(seq_len(nrow(A)), each=nrow(B)*nrow(C)),] *
B[rep(rep(seq_len(nrow(B)), each=nrow(C)), nrow(A)),] *
C[rep(seq_len(nrow(C)), nrow(A)*nrow(B)),]
# [,1] [,2]
# [1,] 6 96
# [2,] 8 112
# [3,] 10 128
# [4,] 9 120
# [5,] 12 140
# [6,] 15 160
# [7,] 12 120
# [8,] 16 140
# [9,] 20 160
# [10,] 18 150
# [11,] 24 175
# [12,] 30 200
# [13,] 18 144
# [14,] 24 168
# [15,] 30 192
# [16,] 27 180
# [17,] 36 210
# [18,] 45 240
:
C[rep(seq_len(nrow(C)), nrow(A)*nrow(B)),]
# [,1] [,2]
# [1,] 3 6
# [2,] 4 7
# [3,] 5 8
# [4,] 3 6
# [5,] 4 7
# [6,] 5 8
# [7,] 3 6
# [8,] 4 7
# [9,] 5 8
# [10,] 3 6
# [11,] 4 7
# [12,] 5 8
# [13,] 3 6
# [14,] 4 7
# [15,] 5 8
# [16,] 3 6
# [17,] 4 7
# [18,] 5 8
一緒にこれらの3を乗算結果をもたらしより多くの行列に拡張されましたが、私はオプションとして投稿したかったのです。なぜなら、rep
と行列行インデックスを使用するだけなので、何が起こっているのかを簡単に確認できます。また、列を返すMatrix
パッケージ内の関数があります:
'?kronecker'を見てください – coffeinjunky
@ zx8754 - 私は同じことを考えました。しかし、望ましい出力は27の行を示します。 – Sagar
私は彼がクロネッカーの製品を望んでいると思います。それぞれの要素に他の行列の各要素を乗じたものです。これは 'kronecker(matA、kronecker(matB、matC))'のようなものです。 – coffeinjunky