例如,给定i=5
and n=8
,我想生成[0;0;0;0;1;0;0;0]
. 具体来说,我想生成向量v
,以便:
v = zeros(n,1);
v(i) = 1;
有没有一种(合理的)方法可以在一行中做到这一点?
另一种解决方案:
I = eye(n);
v = I(:, i);
实际上,您可以有一个y
从 1 到 n 的数字向量,并为每个元素获取这样的向量:
v = I(:, y);
有关此通用解决方案的详细信息,您可以查看我的博客文章。
一种方法是[1:8]'==5
,或更一般地[1:n]'==i
这是另一个:
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,':' }}))