Compare matrices built with repelem and repmat
24 次查看(过去 30 天)
显示 更早的评论
I have an array a of size ZxW.
Z = 20;
W = 30;
A = 40; %will be used below
size(a)
20 30
Then I apply to a two different transformations, and then after those I delete a and I cannot go back to it.
First transformation:
b = repelem(a(:,1),A,A);
Second transformation:
c = repmat(a,[1,1,A,A]);
d = c(:,1,:,:);
After those transformation and deleting a (which cannot be used for the following), I want to compare d and b using
assert( isequal(b,f) )
Where f is a transformation of d that makes the assertion true.
My first idea was a simple reshape:
f = reshape(squeeze(d),[Z*A,A]);
Which does not work as repelem and repmat move entries differently. How can I do this?
Thanks for the attention.
Sincerely
Luca
2 个评论
Jan
2017-8-5
What is the difference to your question https://www.mathworks.com/matlabcentral/answers/351565-from-kron-to-repmat-and-reshape? Please do not post two question for one problem, but edit the original question and answer questions for clarifications. Thanks.
采纳的回答
Jan
2017-8-5
编辑:Jan
2017-8-5
The transformation
c = repmat(a, [1,1,A,A]);
d = c(:,1,:,:);
is an indirection to reproduce b.
Z = 2;
W = 3;
A = 4; % Smaller to check the output manually
a = rand(Z, W);
b = repelem(a(:,1),A,A);
c = reshape(repmat(a(:,1).', [A, A]), Z*A, A);
isequal(b, c)
But if you really want
c = repmat(a, [1,1,A,A]);
d = c(:,1,:,:);
Then:
f = reshape(permute(d, [3,1,4,2]), [Z*A,A]);
isequal(b, f) % 1: equal
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrices and Arrays 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!