convert a double array to something like logical

2 次查看(过去 30 天)
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

回答(3 个)

Azzi Abdelmalek
Azzi Abdelmalek 2013-10-15
编辑:Azzi Abdelmalek 2013-10-15
A=[1;5;7;4];
B=zeros(numel(A),max(A))
B(sub2ind(size(B),(1:numel(A))',A))=1

Vivek Selvam
Vivek Selvam 2013-10-15
编辑:Vivek Selvam 2013-10-21
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(:),:);

hayim
hayim 2014-1-13
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!

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by