From kron to repmat and reshape
5 views (last 30 days)
Show older comments
I am trying to perform the same task following two different methods:
Z = 20;
W = 30;
A = 50;
size(a)
ans =
20 30
First method:
b = squeeze(a(:,1));
result1 = kron(b,ones(A,1))*ones(1,A);
size(result1)
ans =
1000 50
Second method:
b = repmat(a,[1,1,A,A]);
c = squeeze(b(:,1,:,:));
result2 = reshape(c,[Z*A,A]);
assert( all(all(result1 == result2)) )
These two methods should give the same answer, the first using kron and the second using repmat and then reshape (or some other function). The problem is that reshape and kron do not move entries in the same way, hence reshape should be substituted with something else (or differently specified). Thanks for the attention.
Sincerely Luca
1 Comment
Jan
on 4 Aug 2017
b = squeeze(a(:,1)), but b is not used anymore. You calculate result1, but display size(c) - what is "c"? W is not used anywhere. Confusing. I cannot recreate the result with kron reliably. Please edit the question and fix the typos in the code.
Accepted Answer
Jan
on 4 Aug 2017
Perhaps:
Z = 2;
W = 3;
A = 5;
a = rand(Z, W);
b = squeeze(a(:,1));
c1 = kron(b, ones(A,1)) * ones(1,A); % "b" instead of "a"?!
c2 = reshape(permute(repmat(reshape(a(:,1), [1,1,2]), A, A), [2,3,1]), [], A);
0 Comments
More Answers (0)
See Also
Categories
Find more on Resizing and Reshaping Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!