【发布时间】:2014-06-28 19:21:05
【问题描述】:
假设,我有:
A=[1 2; 3 4];
我想使用返回的 repmat:
B = [1 1 2 2; 1 1 2 2; 3 3 4 4; 3 3 4 4]
请您帮忙。谢谢
【问题讨论】:
假设,我有:
A=[1 2; 3 4];
我想使用返回的 repmat:
B = [1 1 2 2; 1 1 2 2; 3 3 4 4; 3 3 4 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
【讨论】:
使用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 用于使用匿名函数 @(x)repmat(x,2,2) 评估 A 中的每个元素,该函数将单个元素复制到 2x2 矩阵中。
arrayfun 的结果是一个 2x2 元胞数组,其中每个元素都是一个 2x2 矩阵。然后,我们通过cell2mat 将此元胞数组转换为矩阵。
【讨论】:
让数据定义为
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
【讨论】: