3

1から20の順序で20個の数値の初期配列Aがある場合。

 A = [1,2,3,4,5,...,20]

そして別のランダム配列Bを持っています:

  B = [1, 15, 3, 20, 7]

次の形式の列ベクトルCを出力したい

  C = [1 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1]

Bが値を持つインデックスでCが1を持っていることに注意してください。

私は以下を試しました:

n=20;
C = zeros(n, 1);
for i=1:length(B)
   C(B(i))=1;
end
4

3 に答える 3

2

ワンライナーで:

full(sparse(B,1,1,max(B),1))

また、関数全体を削除することもできます。ほとんどの matlab 行列演算は疎行列を処理できます。しかし、もちろん、それはあなたが実際に何をしたいかによって異なります。

于 2012-06-12T07:39:22.247 に答える
2

別のワンライナー:

C = accumarray(B(:), 1, [], @(x)1)
于 2012-06-12T13:03:23.370 に答える
1

ベクトル化されたソリューションは次のとおりです。

まずは初期化C

   C = zeros( max(B),1);

次に、配列のインデックスを使用します。

   C(B) = 1;
于 2012-06-12T06:46:12.097 に答える