例如,给定i=5
和n=8
,我想生成[0;0;0;0;1;0;0;0]
。具体来说,我想生成向量v
,以便:
v = zeros(n,1);
v(i) = 1;
是否有(合理的)方法在一行中执行此操作?
答案 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,':' }}))