Populate columns of matrix without for loop using input from a vector of intergers

1 次查看(过去 30 天)
I am looking for a way to generate a target matrix for the neural network toolbox using labeled data where each class is represented in an vector of integers.
Example:
X =
[0
2
1
2
3]
I need this in the form
X = [ 1 0 0 0
0 0 1 0
0 1 0 0
0 0 1 0
0 0 0 1]
Is it possible to do this without a loop?
Thanks

采纳的回答

José-Luis
José-Luis 2017-7-7
编辑:José-Luis 2017-7-7
X=[0, 2, 1, 2, 3];
numCols = max(X) + 1;
result = zeros(numel(X),numCols);
idx = sub2ind(size(result),1:numel(X),X+1 );
result(idx) = 1
To go back:
[~, back_result] = find(result);
back_result = back_result - 1

更多回答(1 个)

Greg Heath
Greg Heath 2017-7-7
>> clear all
classindices = [1 3 5 4 2 ];
classmatrix = full(ind2vec(classindices))
classmatrix =
1 0 0 0 0
0 0 0 0 1
0 1 0 0 0
0 0 0 1 0
0 0 1 0 0
Hope this helps.
Greg

Community Treasure Hunt

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

Start Hunting!

Translated by