Math 如何将介于1-9之间的整数向量转换为“;“一个热向量”;八度?

Math 如何将介于1-9之间的整数向量转换为“;“一个热向量”;八度?,math,octave,Math,Octave,我想把它转换成一个矩阵,其中y中的每一行变成一个热向量: y = 3 6 2 7 我不想使用任何循环。显然,矢量化甚至比必须做一些元素方面的事情要好。但到目前为止,我只有: 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.0

我想把它转换成一个矩阵,其中y中的每一行变成一个热向量:

y = 3
    6
    2
    7
我不想使用任何循环。显然,矢量化甚至比必须做一些元素方面的事情要好。但到目前为止,我只有:

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
给予


伙计@有什么问题吗?我真的说不出你想说什么。不,太好了。我真的很高兴这是多么容易。只做
out=y==[1 2 3 4 5 6 7 8 9]
可能会更快,这就是副本中显示的内容。@Suever是的,除法以缓慢著称。我主要是想从这个角度来说明这次行动有多接近。我原计划扩大它,但现在一个更优越的答案已经通过复制机制联系在一起,我决定不这样做。
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