convert a double array to something like logical
4 views (last 30 days)
Show older comments
Hello. I want to concert every
1-> 1 0 0 0 0 0 0
2-> 0 1 0 0 0 0 0
3-> 0 0 1 0 0 0 0
4-> 0 0 0 1 0 0 0
5-> 0 0 0 0 1 0 0
6-> 0 0 0 0 0 1 0
7-> 0 0 0 0 0 0 1
example: I have a vector A=[1;5;7;4]; I want it to be S= [
1 0 0 0 0 0 0
0 0 0 0 1 0 0
0 0 0 0 0 0 1
0 0 0 1 0 0 0];
Is it possible to do this without for loop? Thanks
0 Comments
Answers (3)
Azzi Abdelmalek
on 15 Oct 2013
Edited: Azzi Abdelmalek
on 15 Oct 2013
A=[1;5;7;4];
B=zeros(numel(A),max(A))
B(sub2ind(size(B),(1:numel(A))',A))=1
0 Comments
Vivek Selvam
on 15 Oct 2013
Edited: Vivek Selvam
on 21 Oct 2013
Hi Theodor,
You can try a look-up table like this:
lut = logical(diag(ones(1,7)));
A = [1 5 7 4]';
S = lut(A(:),:);
0 Comments
hayim
on 13 Jan 2014
Late to the party, but how about this?
A = [1 5 7 4]';
S = bsxfun(@eq,A,1:7)
ans =
1 0 0 0 0 0 0
0 0 0 0 1 0 0
0 0 0 0 0 0 1
0 0 0 1 0 0 0
bsxfun is your friend!
0 Comments
See Also
Categories
Find more on Matrix Indexing 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!