通过行和列上的谓词生成布尔矩阵

Dan*_*mov 4 matlab matrix octave

我有以下向量:

y = [1; 3; 2; 3; 1];
Run Code Online (Sandbox Code Playgroud)

它的所有值都在1n(在这种情况下3)之间,并且表示不同的选项.

我想创建一个大小为size(y, 1)x n的矩阵,其行与y值相对应:

1 0 0 % because y(1) = 1
0 0 1 % because y(2) = 3
0 1 0 % because y(3) = 2
0 0 1
1 0 0
Run Code Online (Sandbox Code Playgroud)

一种方法是这样做

Y = zeros(size(y, 1), num_labels);
for i = 1:m
    Y(i, y(i)) = 1;
end
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点,也许在一个表达式?
基本上,我需要的是生成一个带布尔谓词的矩阵(i, j) => j == y(i).

H.M*_*ter 7

如果a是列向量,您可以尝试此操作

a =  [1; 3; 2; 3; 1];

bsxfun(@eq, a, [1:max(a)]) 
Run Code Online (Sandbox Code Playgroud)

这是否是行向量

a =  [1; 3; 2; 3; 1]';

bsxfun(@eq, a', [1:max(a)]) 
Run Code Online (Sandbox Code Playgroud)


Sam*_*rts 5

如果您可以访问Statistics Toolbox,则该命令dummyvar可以完全满足您的需要.

>> y = [1; 3; 2; 3; 1];
>> dummyvar(y)
ans =
     1     0     0
     0     0     1
     0     1     0
     0     0     1
     1     0     0
Run Code Online (Sandbox Code Playgroud)