如何将 1-9 之间的整数向量转换为 Octave 中的 "one hot vector"?
How do you convert a vector of ints between 1-9 into a "one hot vector" in Octave?
y = 3
6
2
7
我想将其转换为一个矩阵,其中 y 中的每一行都成为一个热向量:
y = 0 0 1 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0
0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0
我不想使用任何循环。显然矢量化甚至比必须按元素做某事更好。但到目前为止我只有:
y./[1 2 3 4 5 6 7 8 9]
ans =
3.00000 1.50000 1.00000 0.75000 0.60000 0.50000 0.42857 0.37500 0.33333
6.00000 3.00000 2.00000 1.50000 1.20000 1.00000 0.85714 0.75000 0.66667
2.00000 1.00000 0.66667 0.50000 0.40000 0.33333 0.28571 0.25000 0.22222
7.00000 3.50000 2.33333 1.75000 1.40000 1.16667 1.00000 0.87500 0.77778
这给了我所有的零,但 none。
您可以过滤掉所有的:
y = [3; 6; 2; 7];
(y./[1 2 3 4 5 6 7 8 9]) == 1
给予
ans =
0 0 1 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0
0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0
y = 3
6
2
7
我想将其转换为一个矩阵,其中 y 中的每一行都成为一个热向量:
y = 0 0 1 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0
0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0
我不想使用任何循环。显然矢量化甚至比必须按元素做某事更好。但到目前为止我只有:
y./[1 2 3 4 5 6 7 8 9]
ans =
3.00000 1.50000 1.00000 0.75000 0.60000 0.50000 0.42857 0.37500 0.33333
6.00000 3.00000 2.00000 1.50000 1.20000 1.00000 0.85714 0.75000 0.66667
2.00000 1.00000 0.66667 0.50000 0.40000 0.33333 0.28571 0.25000 0.22222
7.00000 3.50000 2.33333 1.75000 1.40000 1.16667 1.00000 0.87500 0.77778
这给了我所有的零,但 none。
您可以过滤掉所有的:
y = [3; 6; 2; 7];
(y./[1 2 3 4 5 6 7 8 9]) == 1
给予
ans =
0 0 1 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0
0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0