Effacer les filtres
Effacer les filtres

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

1 vue (au cours des 30 derniers jours)
ken
ken le 22 Mai 2011
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 commentaires
Walter Roberson
Walter Roberson le 22 Mai 2011
These days "for loops" are not necessarily slower, and in some cases are faster.
ken
ken le 22 Mai 2011
Thanks for letting me know Walter

Connectez-vous pour commenter.

Réponse acceptée

Andrei Bobrov
Andrei Bobrov le 22 Mai 2011
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 commentaires
Jan
Jan le 23 Mai 2011
@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.
Andrei Bobrov
Andrei Bobrov le 23 Mai 2011
Thank Jan for your comment

Connectez-vous pour commenter.

Plus de réponses (1)

Fangjun Jiang
Fangjun Jiang le 22 Mai 2011
help repmat

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by