2016-10-27 7 views
2
idx=randperm(5) 
idx=[1,3,4,2,5] 

私はこれがそのように動作することを知っていますが、私はこのような何かを得るためにとにかくそこにいるのが不思議です。それを作るためにどのような方法はmatlabで乱数配列を2セット取得できますか?

idx=[1,3,4,2,5,5,3,2,4,1] 

1つのアレイ

後のアレイの1セットを追加することがありますか?

答えて

1

ベクトル化された方法は、サイズ(m,n)のランダム配列を作成し、それを各行に沿ってソートし、argsortインデックスを取得することです。これらのインデックスの各行は、randperm値のグループを表します。ここで、mは必要なグループの数であり、nは各グループの要素の数です。

したがって、実装は次のようになります -

[~,idx] = sort(rand(2,5),2); 
out = reshape(idx.',1,[]) 

サンプル実行 -

>> [~,idx] = sort(rand(2,5),2); 
>> idx 
idx = 
    5  1  3  2  4 
    4  3  2  5  1 
>> out = reshape(idx.',1,[]) 
out = 
    5  1  3  2  4  4  3  2  5  1 
0

あなたはモジュロ演算を使用することができます:私はOPは `最初望んでいると思います

n = 5 %maximum value 
r = 2 %each element are repeated r times. 

res = mod(randperm(r*n),n)+1 
+0

を同様に第2組の「n」要素についても同様に「1:n」のランダム配列を有する「n」を含む。少なくともOPの言葉では: '1つの配列の後に1つの配列を追加する 'と期待されるo/pを見て、私はそう思った。 – Divakar

+0

@Divakarホーええ、それは可能です、私はちょうどOPの確認を待っていて、これが望ましい出力でない場合、私は私の答えを削除します。 – obchardon

関連する問題