でそれを生成するために、いテーブルから生成した番号を取得します。は、それがより良いループの外のすべての乱数を生成したり、乱数を生成するために必要なすべての反復で、それは冒頭で一度、すべての乱数を生成し、各反復でする方が良いかどうフライ通常
しかし、私はこの直感に反する今日の問題に遭遇します。私は長さNの数値ベクトルを持っている、各反復で、私はこのベクトルの順序を再シャッフルして何かをしなければならない。
Iは、2つの方法を実施する:最初のものは、私はちょうど説明とまったく同じであり、すなわち、各反復において、Iは、ループの前に、私は
関数を呼び出し、第2の方法においてV = randperm(N)
関数を呼び出します
W = arrayfun(@(x)randperm(N),(1:T-1)','UniformOutput',0);
W = cell2mat(W);
ここでT
は、繰り返しの合計数です。その後、各反復で、行列W
から行を取得します。 2つのメソッドの残りのコードはまったく同じです。
しかし、私は、第二のコードが第一1(私はのコマンドことを確認:W = arrayfun(@(x)randperm(N),(1:T-1)','UniformOutput',0);
は多くの時間を取ることはありません)よりはるかに遅いです見つけます。私はプロファイラを実行すると、私は2番目のコードでは、関数ismember>ismemberR2012a
を1回目のコードより3回呼び出すことがわかります。なぜ私は理解できませんでした。
「rあなたは大きなランダムな行列を与えることができる 'randi'のようなものではありませんか? – Matt