让我们说,我有:
A=[1 2; 3 4];
我想使用返回的repmat:
B = [1 1 2 2; 1 1 2 2; 3 3 4 4; 3 3 4 4]
请帮助你。谢谢
答案 0 :(得分:4)
我不知道使用repmat
的方法,但这是使用kron
的方法
kron([1 2 ; 3 4],[1 1;1 1])
ans =
1 1 2 2
1 1 2 2
3 3 4 4
3 3 4 4
答案 1 :(得分:0)
使用repmat
的替代方案是
A=[1 2; 3 4];
cell2mat(arrayfun(@(x)repmat(x,2,2),A,'UniformOutput',false))
ans =
1 1 2 2
1 1 2 2
3 3 4 4
3 3 4 4
arrayfun
用于使用匿名函数A
评估@(x)repmat(x,2,2)
中的每个元素,该函数将该单个元素复制到2x2矩阵中。
arrayfun
的结果是2x2单元阵列,其中每个元素是2x2矩阵。然后,我们通过cell2mat
将此单元格数组转换为矩阵。
答案 2 :(得分:0)
将数据定义为
A = [1 2; 3 4];
R = 2; %// number of repetitions of each row
C = 2; %// number of repetitions of each column. May be different from R
两种可能的方法如下:
最简单的方法是使用索引:
B = A(ceil(1/R:1/R:size(A,1)), ceil(1/C:1/C:size(A,2)));
如果你真的想用repmat
来做,你需要使用permute
和reshape
来玩尺寸:将原始尺寸1,2移动到尺寸2,4 (permute
);沿着新的维度1,3(repmat
)重复;将尺寸1,2折叠成一个维度,将3,4折叠成另一个维度(reshape
):
[r c] = size(A);
B = reshape(repmat(permute(A, [3 1 4 2]), [R 1 C 1]), [r*R c*C]);
R=2
,C=3
的示例结果(使用这两种方法中的任何一种获得):
B =
1 1 1 2 2 2
1 1 1 2 2 2
3 3 3 4 4 4
3 3 3 4 4 4