2016-11-08 5 views
-2

これは非常に曖昧な質問かもしれません - 私は前もって謝罪します。各変数の与えられた範囲からN組の変数の組み合わせを作成する

yは、a、b、c、d、eの関数である。 aは1から130になります。 bが0.5~1であり; 3~10のc; 0から1までのd; eは1-dである。

私は指定された範囲からa、b、c、d、eの組み合わせのN(言い換えれば10,000)セットを作成できますか?

+1

タイプを使うのか? – MMF

+1

'itertools'を見てください。 – Phlya

+0

多分いくつかの入力と出力の例を提供することができますか? – Aaron

答えて

0

itertoolsは、そのようなイテレータを作成するための素晴らしいライブラリです。あなたの場合、私たちが必要とするのはproductです。ただし、必要なポイント数を設定することはできません。数学的にそれを導き出し、それをステップに変換しなければなりません(range()関数の最後にある1秒)。

a = [i for i in range(1, 131, 1)] 
b = [i/10 for i in range(5, 11,1)] 
c = [i for i in range(3, 11, 1)] 
d = [i/10 for i in range(0, 11, 1)] 

from itertools import product 

combs = product(a, b, c, d) 
for i, x in enumerate(combs, 1): 
    x = list(x) 
    x.append(1-x[-1]) 
    print(i, x) # example print: 52076 [99, 0.8, 9, 0.1, 0.9] 

の例では、上記の生成:130 * 6 * 8 * 11 = 68640組み合わせ

これらはあなたが要求したよりも多くのですが、あなたはポイントを得ます。変数をより細かく離散化したものにすることもできます。

私も.. a & cが整数の変数である

+1

'e'は' d'の渡された*値に依存します - あなたはあらかじめそれを計算すべきではありません。 – brianpck

+0

ニースキャッチ。ありがとうございました。イテレータが編集できないタプルを生成するので、修正は実際に効率を失います。 –

+0

これは素晴らしいです。助けてくれてありがとう@ Ev.Kounis。 – DPdl

0

を想定しています私は、あなたがこれらのすべてのための浮動小数点数をしたいと仮定します。あなたがint秒をしたい場合は、 `A`& 'C'のrandom.randint

from random import uniform 

inputs = [[uniform(1,130), uniform(.5, 1), uniform(3,10), uniform(0,1)] for _ in range(N)] 

for input_list in inputs: 
    input_list.append(1-input_list[-1]) 
    a(*input_list) 
関連する問題