9

たとえば、 と が与えられた場合、i=5n=8生成したいとします[0;0;0;0;1;0;0;0]。具体的には、次のようにベクトルを生成したいと考えてvいます。

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

これを1行で行う(合理的な)方法はありますか?

4

4 に答える 4

14

別の解決策:

I = eye(n);

v = I(:, i);

実際には、y1 から n までの数値のベクトルを持ち、要素ごとに次のようなベクトルを取得できます。

v = I(:, y);

この一般的なソリューションの詳細については、私のブログ投稿を参照してください。

于 2012-06-05T00:16:02.777 に答える
13

1 つの方法は[1:8]'==5、またはより一般的には[1:n]'==i

于 2012-06-04T03:49:08.537 に答える
5

番目の位置に 1 を持つ長さの行ベクトルsparseを作成するために使用する別のソリューションを次に示します。ni

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

利点は、大きな のn場合、これもメモリ効率が高く、行列計算で通常どおり使用できることです。完全なベクトルが必要な場合は、 を使用してfullください。

于 2012-06-05T00:29:40.323 に答える
1

ここに別のものがあります:

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,':' }}))
于 2012-06-04T06:14:25.743 に答える