【发布时间】:2012-06-04 03:47:39
【问题描述】:
例如,给定i=5和n=8,我想生成[0;0;0;0;1;0;0;0]。具体来说,我想生成向量v 以便:
v = zeros(n,1);
v(i) = 1;
有没有一种(合理的)方法可以在一行中做到这一点?
【问题讨论】:
例如,给定i=5和n=8,我想生成[0;0;0;0;1;0;0;0]。具体来说,我想生成向量v 以便:
v = zeros(n,1);
v(i) = 1;
有没有一种(合理的)方法可以在一行中做到这一点?
【问题讨论】:
另一种解决方案:
I = eye(n);
v = I(:, i);
实际上,您可以拥有一个从 1 到 n 的数字向量y,并为每个元素获取这样的向量:
v = I(:, y);
您可以查看我的blog post 了解有关此通用解决方案的详细信息。
【讨论】:
一种方式是[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,':' }}))
【讨论】: