12

私は martix を持っていて、その要素をシャッフルしたいと思っています。

x=[1 2 5 4 6 ]

シャッフル後(こんな感じ)

x=[2 4 6 5 1]    

matlabには機能がありますか? PHP array_shuffleでこれを行います。

4

2 に答える 2

24
  1. を使用してシャッフルされたインデックスを取得するrandperm

    idx = randperm(length(x));
    
  2. インデックスを使用してシャッフルされたベクトルを取得する

    xperm = x(idx);

于 2012-11-06T18:29:31.900 に答える
6

の代わりに、統計ツールボックスからrandpermを使用することもできます。randsample

y = randsample(n,k)から までの整数から置換なしで一様に無作為に抽出された値のベクトルをk返します。1y1n

「置換なし」(デフォルト)であることに注意してください。したがって、 を に設定すると、ベクトルのランダム シャッフルを実行するのと同じになりますklength(x)例えば:

x = 1:5;
randsample(x,length(x))
%ans = 
%       4     5     3     1     2

randpermさまざまな用途に簡単に拡張できるので、これよりも気に入っています。たとえば、から 3 つの要素xをランダムに描画するには (有限のアイテムを含むバケツから描画するように)、 を行いますrandsample(x,3)。同様に、アルファベットが の要素で構成されている 3 つの数字を描きたいがx、繰り返しを許可する場合は、 を行いますrandsample(x,3,true)

于 2012-11-06T21:47:12.767 に答える