如何将1-9之间的整数向量转换为Octave中的“一个热矢量”?

时间:2017-01-28 19:47:28

标签: math 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

给了我所有的但没有零。

1 个答案:

答案 0 :(得分:0)

你可以过滤掉所有的:

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