MATLAB:比较用repelem和repmat构建的矩阵

时间:2017-08-05 10:21:57

标签: matlab reshape

我有一个大小为ZxW的数组。

Z = 20;
W = 30;
A = 40; %will be used below
size(a)
20      30

然后我申请了两个不同的转换,然后我删除了一个,我不能回到它。

第一次转型:

b = repelem(a(:,1),A,A);

第二次转型:

c = repmat(a,[1,1,A,A]);
d = c(:,1,:,:);

在那些转换并删除a(不能用于以下内容)之后,我想使用

比较d和b
assert( isequal(b,f) )

其中f是d的变换,使断言成立。

我的第一个想法是一个简单的重塑:

f = reshape(squeeze(d),[Z*A,A]);

哪个不起作用repelem和repmat以不同的方式移动条目。我怎么能这样做?

感谢您的关注。

此致

卢卡

编辑:已更改

c = repmat(a,[A,A]);

c = repmat(a,[1,1,A,A]);

2 个答案:

答案 0 :(得分:1)

答案(Jan Simon):

f = reshape(permute(d, [3,1,4,2]), [Z*A,A]);
isequal(b, f)    % 1: equal

感谢您的帮助。

卢卡

答案 1 :(得分:0)

NOTE: This solution is obsoleted with the edited question, please refer to the other solutions posted.

Look closely at what the pattern of b and d are:

b = [1 1 1 2 2 2 3 3 3].'
d = [1 2 3 1 2 3 1 2 3].'

Hence, the transformation f can be:

f = reshape(d, [A, A]).'
f = f(:)

This will convert d to be exactly b or vice versa.