Compare matrices built with repelem and repmat
10 ビュー (過去 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!