Add a known column to a matrix 'n' times without a loop?

Hi Guys!
Is there a way of qriting the script below without the loop? I'm sure there's a way but I can't find it in the help section or the internet.
I want to add a known column of numbers to a matrix 'n' times.
Thank you!
Ken
clear all
clc
a=zeros(5,6); % matrix a
[m,n]=size(a);
b=zeros(m,n); % matrix b
b(1:10)=[8 8 8 8 8 10 10 10 10 10];
for i=3:n;
b(:,i)=[1 2 3 4 5];
end

4 Comments

There are lots of ways, but why would you want to?
I just wanted to remove the 'for loop' to make the script more efficient/faster. Am I right in thinking 'for loops' are harder to compute?
I have done a 'tic toc' test and the for loop takes about the same time as andrei's first two suggestions. Its just a tiny tiny bit slower.
These days "for loops" are not necessarily slower, and in some cases are faster.
Thanks for letting me know Walter

Sign in to comment.

 Accepted Answer

b(:,k:n) = (1:5)'*ones(1,n-k+1);
more
V = 1:5;
b(:,k:n) = V(ones(1,n-k+1),:).';
more more
b(:,k:n) = repmat(1:5,n-k+1,1).';

3 Comments

Thanks Andrei for all your suggestions! I was initially trying to do your first one but it didn't work because I wasn't multiplying by a matrix.
@Andrei: The ONES method is applied inside REPMAT also. Therefore I expect using it directly is faster, because the overhead of calling a function is avoided.
Usually a matrix with repeated rows wastes memory, because of the redundancy. Therefore a BSXFUN method can be faster: Do not create the matrix explicitely, but instruct BSXFUN to perform an operation by "inflating" the vector dynamically.
Thank Jan for your comment

Sign in to comment.

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!