たとえば、 と が与えられた場合、i=5
をn=8
生成したいとします[0;0;0;0;1;0;0;0]
。具体的には、次のようにベクトルを生成したいと考えてv
います。
v = zeros(n,1);
v(i) = 1;
これを1行で行う(合理的な)方法はありますか?
別の解決策:
I = eye(n);
v = I(:, i);
実際には、y
1 から n までの数値のベクトルを持ち、要素ごとに次のようなベクトルを取得できます。
v = I(:, y);
この一般的なソリューションの詳細については、私のブログ投稿を参照してください。
1 つの方法は[1:8]'==5
、またはより一般的には[1:n]'==i
ここに別のものがあります:
n = 8;
p = 4;
arrayfun(@str2double,dec2bin(2^(p-1),n))
そしてもう1つ(行ベクトルを作成します):
circshift( [1 zeros(1,n-1)],[0 p]);
または列ベクトル:
circshift( [1 ; zeros(n-1,1)],[p 0]);
ここに別のものがあります:
subsref( eye(n), struct('type','()', 'subs',{{ p,':' }}))