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

조회 수: 1 (최근 30일)
Abdelhamid AHAJJAM
Abdelhamid AHAJJAM 2019년 12월 14일
댓글: Turlough Hughes 2019년 12월 15일
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)

채택된 답변

Turlough Hughes
Turlough Hughes 2019년 12월 14일
편집: Turlough Hughes 2019년 12월 15일
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
Stephen23
Stephen23 2019년 12월 15일
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 2019년 12월 15일
Thanks Stephen.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by