用于n向量的Matlab/Octave单线程,在第i个位置具有1

Sno*_*all 8 matlab octave

例如,给定i=5n=8,我想生成[0;0;0;0;1;0;0;0].具体来说,我想生成向量,v以便:

v = zeros(n,1);
v(i) = 1;
Run Code Online (Sandbox Code Playgroud)

是否有(合理的)方法在一行中完成此操作?

top*_*hef 14

另一种方案:

I = eye(n);

v = I(:, i);
Run Code Online (Sandbox Code Playgroud)

实际上,你可以有一个y从1到n的数字向量,并为每个元素得到这样的向量:

v = I(:, y);
Run Code Online (Sandbox Code Playgroud)

您可以在我的博客文章中查看有关此常规解决方案的详细信息.


Sno*_*all 12

一种方式是[1:8]'==5,或更一般地说[1:n]'==i

  • 好的解决方案 但它不是*完全*相同,因为你得到逻辑而不是双.我会做双([1:n]'== i); (4认同)

abc*_*bcd 5

这是另一种解决方案,sparse用于创建n长度为i第1位的行矢量:

v = sparse(1,i,1,1,n)
Run Code Online (Sandbox Code Playgroud)

优点是,对于大型n,这也是内存有效的,并且可以像往常一样用于矩阵计算.如果您需要完整的矢量,请使用full.