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

时间:2012-06-04 03:47:39

标签: matlab octave

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

v = zeros(n,1);
v(i) = 1;

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

4 个答案:

答案 0 :(得分:14)

另一种解决方案:

I = eye(n);

v = I(:, i);

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

v = I(:, y);

您可以查看我的blog post了解此常规解决方案的详细信息。

答案 1 :(得分:11)

一种方式是[1:8]'==5,或更普遍的[1:n]'==i

答案 2 :(得分:5)

以下是使用sparse创建n长度行向量并在i位置使用1的另一种解决方案:

v = sparse(1,i,1,1,n)

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

答案 3 :(得分:1)

这是另一个:

n = 8;
p = 4;
arrayfun(@str2double,dec2bin(2^(p-1),n))

另一个(创建行向量):

circshift( [1 zeros(1,n-1)],[0 p]);

或列向量:

circshift( [1 ; zeros(n-1,1)],[p 0]);

这是另一个:

subsref( eye(n), struct('type','()', 'subs',{{ p,':' }}))