How to repeat a rectangular matrix in matlab?

2 次查看(过去 30 天)
How to repeat a rectangular matrix in matlab?
Not using loops, just matlab's build-in commands.
Thanks a lot!

采纳的回答

Star Strider
Star Strider 2014-7-24
编辑:Star Strider 2014-7-24
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 个评论
rui
rui 2014-7-24
I used circshift, sparse and loops in my code but it still takes a very long time to obtain the results, and I've been searching all day but with no luck, so I guess that loop is inevitable in this situation. Thank you so much for your help, I really appreciate it!
Star Strider
Star Strider 2014-7-24
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.

请先登录,再进行评论。

更多回答(2 个)

Azzi Abdelmalek
Azzi Abdelmalek 2014-7-24
编辑:Azzi Abdelmalek 2014-7-24
A=[1 2 ; 3 4]
B=repmat(A,3,2)
  3 个评论
Azzi Abdelmalek
Azzi Abdelmalek 2014-7-24
You didn't say anything about how do you want to shift your matrix? it's not just repeating a matrix.
rui
rui 2014-7-24
My mistake. Shifting the matrix by 2 positions in 2-dimensions. At the beginning there is a=[1 1 1 1;2 2 2 2], after doing it 3 times without using any loops (just using build-in commands), it becomes a 6-by-8 matrix as shown in the picture. Those extra positions are filled by 0s automatically. Thanks again.

请先登录,再进行评论。


Andrei Bobrov
Andrei Bobrov 2014-7-24
编辑:Andrei Bobrov 2014-7-24
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));

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by