How to repeat a rectangular matrix in matlab?
3 views (last 30 days)
Show older comments
How to repeat a rectangular matrix in matlab?
Not using loops, just matlab's build-in commands.
Thanks a lot!
0 Comments
Accepted Answer
Star Strider
on 24 Jul 2014
Edited: Star Strider
on 24 Jul 2014
This works:
a = [1 1 1 1; 2 2 2 2];
A = zeros(6);
for k1 = 1:2:size(A,1)-1
A(k1:k1+1, k1:k1+3) = a;
end
A % Show Result
6 Comments
Star Strider
on 24 Jul 2014
My pleasure!
The circshift approach (that I used) expands the matrix with each step. That takes more time, because MATLAB has to allocate new memory each time.
I suggest using my first approach and preallocating the matrix. That eliminates the problem of expanding the matrix at each step, eliminates the call to circshift, and produces the same result.
More Answers (2)
Azzi Abdelmalek
on 24 Jul 2014
Edited: Azzi Abdelmalek
on 24 Jul 2014
A=[1 2 ; 3 4]
B=repmat(A,3,2)
3 Comments
Azzi Abdelmalek
on 24 Jul 2014
You didn't say anything about how do you want to shift your matrix? it's not just repeating a matrix.
Andrei Bobrov
on 24 Jul 2014
Edited: Andrei Bobrov
on 24 Jul 2014
for your case:
t = zeros(6,2);
out = [kron(eye(3),a(:,1:2)),t]+[t,kron(eye(3),a(:,3:4))];
variant
m = 3;
k=2;
s = size(a);
n = (m-1)*k+s(2);
m1 = m*s(1);
out = zeros(m1,n);
t = sub2ind([m1,n],1:s(1):m1,1:k:k*m);
t2 = bsxfun(@plus,(0:s(2)-1)*m1,(0:s(1)-1)');
out(bsxfun(@plus,t,t2(:))) = a(:,:,ones(m,1));
See Also
Categories
Find more on Loops and Conditional Statements 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!