3

Matlab で次のアルゴリズムを実装する必要があります。

  1. 仮定するA = [3 4 1 9 5]
  2. Aランダムに並べ替えるA = [5 1 4 3 9]
  3. 最初の 2 つの要素に 2 を追加します。A = [7 3 4 3 9]
  4. Aを後ろに並べ替え、A = [3 4 3 9 7]

randperm()関数を使用して並べ替えています:

index = randperm(numel(A));
A = A(index);

Aしかし、問題は、配列を最初の順列に変更した後、元に戻す方法です。

4

3 に答える 3

9

実際には、インデックスを左側に配置できます。

A(index) = A;

;-)

于 2012-11-18T11:38:55.210 に答える
4

したがって、基本的には、ベクトルの2〜2個のランダムな要素を追加するだけですA。並べ替える必要はありません。2つのランダムなインデックスを選択するだけです。matlabの最近のバージョンでは、randpermは2つの引数を取ります。

p = randperm(n,k)k1から両端までランダムに選択された一意の整数を含む行ベクトルを返しますn

したがって、次を使用できます。

idx = randperm(numel(A),2);
A(idx)=A(idx) + 2;

古いバージョンでは、次を使用できます。

idx = randperm(numel(A));
idx = idx(1:2);
A(idx)=A(idx) + 2;
于 2012-11-18T13:10:23.517 に答える
3

これを試して

 index = randperm(numel(A));
 nums=1:length(A)
 return_index=nums(index)
 temp = A(index);
 temp(1:2)=temp(1:2)+2;
 A(nums)=temp(return_index);
于 2012-11-18T11:11:52.207 に答える