How can I convert a numeric matrix(a) to a 0 and 1 matrix(b)?

3 vues (au cours des 30 derniers jours)
Moe
Moe le 25 Avr 2014
Commenté : Moe le 25 Avr 2014
Hi everyone,
suppose I have a matrix:
a = [3;
1;
4;
2]
Then I want it to be:
b = [0 0 1 0;
1 0 0 0;
0 0 0 1;
0 1 0 0]
Explanation of first row in matrix "b" (how it's created, manual):
if a(1)=1
b(1,1)=1
elseif b(1,1)=0
end
if a(1)=2
b(1,2)=1
elseif b(1,2)=0
end
if a(1)=3
b(1,3)=1
elseif b(1,3)=0
end
if a(1)=4
b(1,4)=4
elseif b(1,4)=0
end
and so on for rows 2,3 and 4 in matrix a.
I'm looking for a automatic loop or function in the Matlab, because real size of matrix a is 1000 rows.
Please help me, Thanks.

Réponse acceptée

Geoff Hayes
Geoff Hayes le 25 Avr 2014
Hi Mohammed,
Why not just use a simple loop?
r=size(a,1); % get the number of rows in a (first dimension,1)
b=zeros(r,r); % initialize the b matrix to all zeros
for i=1:r
b(i,a(i))=1; % set the ith row of b with the a(i) column set to one
end
Geoff
  5 commentaires
Geoff Hayes
Geoff Hayes le 25 Avr 2014
Hi Mohammed,
So this isn't much different from before - your b now has 8 rows (since a has 4 rows) and all rows of b are paired. The first row of a either populates row 1 or row 2 of b, the second row of a populates either row 3 or row 4 of b, etc. with the ith row of a populating either row 2i-1 or 2i of b:
for i=1:r
if a(i,2)==1
b(2*i-1,a(i,1))=1;
else
b(2*i,a(i,1))=1;
end
end
That should do it!
Geoff
Moe
Moe le 25 Avr 2014
Thanks Geoff, It was great and worked very well.

Connectez-vous pour commenter.

Plus de réponses (1)

Jos (10584)
Jos (10584) le 25 Avr 2014
No need for for-loops. This shows the power of linear indexing:
a = [3 1 4 2] % these specify column indices
b = zeros(numel(a), max(a))
idx = sub2ind(size(b), 1:numel(a), a(:).') % linear indices
b(idx) = 1
As for your second question:
a = [3 2; 1 1; 4 2; 2 1]
b = zeros(2*size(a,1), max(a(:,1)))
colix = a(:,1).'
rowix = 2*(1:size(a,1)) - (a(:,2)==1).'
idx = sub2ind(size(b), rowix, colix)
b(idx) = 1
  1 commentaire
Moe
Moe le 25 Avr 2014
Thanks a lot Jos. You used a professional level of coding in Matlab.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Loops and Conditional Statements 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