How can I convert a numeric matrix(a) to a 0 and 1 matrix(b)?
Show older comments
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.
Accepted Answer
More Answers (1)
Jos (10584)
on 25 Apr 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
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!