给定矩阵I = [1,2;3,4]
,我想复制元素以创建矩阵I2
,以便:
I2 = [1 1 1 2 2 2
1 1 1 2 2 2
1 1 1 2 2 2
3 3 3 4 4 4
3 3 3 4 4 4
3 3 3 4 4 4]
除了使用repmat
之外,还有哪些其他方法或功能可用?
答案 0 :(得分:7)
使用kron
:
>> N = 3 %// Number of times to replicate a number in each dimension
>> I = [1,2;3,4];
>> kron(I, ones(N))
ans =
1 1 1 2 2 2
1 1 1 2 2 2
1 1 1 2 2 2
3 3 3 4 4 4
3 3 3 4 4 4
3 3 3 4 4 4
如果你不知道kron
做了什么,这可能值得一些解释。 kron
代表Kronecker Tensor Product。大小为kron
且大小为A
的{{1}}的两个矩阵m x n
之间的B
会创建一个大小为p x q
的输出矩阵,以便:
因此,对于mp x nq
中的每个系数,我们取这个值,将其与矩阵A
中的每个值相乘,我们将这些矩阵按照我们在{{1}中看到的顺序排列}。因此,如果我们让B
和A
为3 x 3矩阵,那么就可以获得上述结果。
答案 1 :(得分:4)
使用索引:
I = [1, 2; 3, 4]; %// original matrix
n = 3; %// repetition factor
I2 = I(ceil(1/n:1/n:size(I,1)), ceil(1/n:1/n:size(I,2))); %// result
答案 2 :(得分:3)
bsxfun
的单行 -
R = 3; %// Number of replications
I2 = reshape(bsxfun(@plus,permute(I,[3 1 4 2]),zeros(R,1,R)),R*size(I,1),[])
示例运行 -
I =
3 2 5
9 8 9
I2 =
3 3 3 2 2 2 5 5 5
3 3 3 2 2 2 5 5 5
3 3 3 2 2 2 5 5 5
9 9 9 8 8 8 9 9 9
9 9 9 8 8 8 9 9 9
9 9 9 8 8 8 9 9 9