Given Matrix
1 2 3 4
Generate a new matrix of size \(2\) by \(3\) where each element of the new matrix is the above matrix. Hence the new matrix will look like
1 2 1 2 1 2 3 4 3 4 3 4 1 2 1 2 1 2 3 4 3 4 3 4
In Matlab, repmat() is used. In Mathematica, a Table command is used, followed by ArrayFlatten[]
Mathematica mat = {{1,2}, {3,4}} r = Table[mat,{2},{3}]; ArrayFlatten[r]
|
{{1,2,1,2,1,2}, {3,4,3,4,3,4}, {1,2,1,2,1,2}, {3,4,3,4,3,4}} |
Another way is to use kron() in matlab, and KroneckerProduct in Mathematica and LinearAlgebra[KroneckerProduct] in Maple, which I think is a better way. As follows
Mathematica mat = {{1,2}, {3,4}} kernel = Table[1, {2}, {3}]; (* {{1, 1, 1}, {1, 1, 1}} *) KroneckerProduct[kernel, mat]
|
{{1,2,1,2,1,2}, {3,4,3,4,3,4}, {1,2,1,2,1,2}, {3,4,3,4,3,4}} |
Matlab A=[1 2;3 4] kernel=ones(2,3) kernel = 1 1 1 1 1 1 kron(kernel,A)
|
ans = 1 2 1 2 1 2 3 4 3 4 3 4 1 2 1 2 1 2 3 4 3 4 3 4 |
Maple A:=Matrix([[1,2],[3,4]]); kern:=Matrix([[1,1,1],[1,1,1]]); LinearAlgebra:-KroneckerProduct(kern,A);
|
[[1,2,1,2,1,2], [3,4,3,4,3,4], [1,2,1,2,1,2], [3,4,3,4,3,4]] |