Matlab, целочисленный вектор для двоичной матрицы без цикла

У меня есть вектор с N элементами, все целые числа 1-M. Я хочу преобразовать это в матрицу NxM с каждой строкой, содержащей только нули, за исключением того, что i: th элемент установлен в один, я является целым числом в векторе.

Например: [1 1 3] = > [1 0 0; 1 0 0; 0 0 1]

В настоящее время я делаю это в цикле, например:

y_vec = zeros(m, num_labels);
for i = 1:m
    y_vec(i, y(i)) = 1;
end

Есть ли способ сделать это без цикла?

Ответ 1

Да, есть:

y = [1 1 3];
m = length(y);
num_labels = max(y);

%# initialize y_vec
y_vec = zeros(m,num_labels);

%# create a linear index from {row,y}
idx = sub2ind(size(y_vec),1:m,y);

%# set the proper elements of y_vec to 1
y_vec(idx) = 1;

Ответ 2

Если у вас есть доступ к Statistics Toolbox, команда dummyvar выполняет именно это.

>> dummyvar([1 1 3])
ans =
     1     0     0
     1     0     0
     0     0     1