2017-06-17 11 views
0

numpyで乱数の固定長nのN個の配列を生成したいのですが、配列の範囲が異なる必要があります。N個の異なる範囲の乱数配列を生成するための効率的な方法

そこで、例えば、私は、サイズN = 5のN = 100個のアレイを生成すると、各アレイは、間にその数を有していなければならない:

  • まず数0〜10
  • 第数20〜 100

のように...私の心に来る

最初のアイデアのようなものやっている:

first=np.random.randint(0,11, 100) 
second=np.random.randint(20,101, 100) 
... 

そして、私はそれらを入れ子にする必要があります。もっと効率的な方法がありますか?

+0

どのように範囲を定義しますか? 100の異なる範囲については、それを定義するプログラム的な方法が必要ですか? – Psidom

+0

これらの配列をスクリプトで繰り返し生成しているか、開始時に1回だけ生成していますか?一度だけであれば、おそらく効率について心配する価値はないでしょうし、100の範囲で繰り返してください。 – hpaulj

+0

@hpauljこれらの配列は、スクリプト内で1回生成されます。 – D1X

答えて

0

私はちょうど彼らのインデックス

from np.random import randint 
array_holder = [[] for i in range(N)] # Get N arrays in a holder 
ab_holder = [[a1, b1], [a2, b2]] 
for i in range(len(array_holder)): # You iterate over each array 
    [a, b] = [ab_holder[i][0], ab_holder[i][1]] 
    for j in range(size): # Size is the ammount of elements you want in each array 
     array_holder[i].append(randint(a, b)) # Where a is your base and b ends the range 
+0

a、bは一意ではありません。 – D1X

+0

だからこそ、それらは変数で、そのコードにaとbの変更を加え、編集したコードを挿入し、aとbの値をハードコードする方法を追加しました(関数から返されない場合) –

0

別の可能性を介して、他のアレイ内に置くと、それらを繰り返すでしょう。設定rangesは、各配列の個々の部分の範囲とその数が両方とも必要であることを示します。 sizeは、配列の個々の部分でサンプリングする値の数です。 Nはモンテカルロサンプルのサイズです。 arraysが結果です。

import numpy as np 

ranges = [ (0, 10), (20, 100) ] 
size = 5 
N = 100 

arrays = [ ] 
for n in range(N): 
    one_array = [] 
    for r in ranges: 
     chunk = np.random.randint(*r, size=size) 
     one_array.append(chunk) 
    arrays.append(one_array) 

これは、Pythonの代わりにnumpyののappendを使用するためにかなりの違いを生むかもしれませんが、私はそれを読みやすくするために(と:)書くこと)にするには、この方法でこれを書いています。

関連する問題