Is there a way to vectorize the definition of this matrix ?

1 vue (au cours des 30 derniers jours)
Abdelhamid AHAJJAM
Abdelhamid AHAJJAM le 14 Déc 2019
Commenté : Turlough Hughes le 15 Déc 2019
I am defining the matrix z this way :
z=zeros(n,m);
for i=1:n
for j=1:m
z(i,j)= i==y(j);
end
end
where y is a vector of size m. Is there a better way to write this ? (one line maybe)

Réponse acceptée

Turlough Hughes
Turlough Hughes le 14 Déc 2019
Modifié(e) : Turlough Hughes le 15 Déc 2019
Here's one way to do it in one line:
z = y.*ones(n,m)==(1:n).'.*ones(n,m);
I tested with the following inputs:
y=1:10;
n=5; m=length(y);
z = y.*ones(n,m)==(1:n).'.*ones(n,m);
edit: following stephens comment.
  2 commentaires
Stephen23
Stephen23 le 15 Déc 2019
Note that square brackets are a concatentation operator, and should be replaced with grouping parentheses (exactly as the hint in the MATLAB editor also tells you):
(1:n)
It is a good habit to use transpose instead of conjugate transpose (unless you really need the conjugate transpose):
(1:n).'
Turlough Hughes
Turlough Hughes le 15 Déc 2019
Thanks Stephen.

Connectez-vous pour commenter.

Plus de réponses (0)

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