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

1 view (last 30 days)
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

Accepted Answer

José-Luis
José-Luis on 7 Jul 2017
Edited: José-Luis on 7 Jul 2017
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

More Answers (1)

Greg Heath
Greg Heath on 7 Jul 2017
>> 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

Categories

Find more on Sequence and Numeric Feature Data Workflows 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!