2017-03-27 11 views
-2

平均mと標準偏差sdの正規分布からn個のランダムに選択された値の平均を計算する関数mean_normal(n、m、sd)を書きました。私はmapとnormalvariateを使ってシーケンスを生成し、reduceを使って平均を計算したいが、それを行う方法の構文は不明だ。ここで私はこれまで持っているものです。マップを使用して削減しますか?

from random import normalvariate 

average = lambda L: sum(L)/len(L) 

mean_normal = lambda n, m, sd: average([normalvariate(m, sd) for i in range(n)]) 
print(mean_normal(10, 5, 2)) 

私は、一般的に、私は、リストのようなもの(マップ(ラムダI必要に知っている:...、範囲(n)を)が、私は右のthatsのかなりわからないんだけど

教育目的のために
+1

これに 'lambda'、' map'、 'reduce'を使用する特別な理由は何ですか? – user2357112

+0

これは予期せぬことですか?実際の質問は何ですか? –

+0

[オンラインチュートリアル](http://www.bogotobogo.com/python/python_fncs_map_filter_reduce.php)を読んだ後、その構文についてはっきりしませんか? – Prune

答えて

1

>>> mean_normal2 = lambda n, m, sd: average(map(lambda _: normalvariate(m, sd), range(n))) 
>>> mean_normal2(10, 5, 2) 
4.749961072139493 

トリックはラムダの引数を無視することであるしかし、あなたはitertoolsからrepeatfuncレシピのようなものを使用したほうが良いでしょう:。

def repeatfunc(func, times=None, *args): 
    """Repeat calls to func with specified arguments. 

    Example: repeatfunc(random.random) 
    """ 
    if times is None: 
     return starmap(func, repeat(args)) 
    return starmap(func, repeat(args, times)) 

私はそれを練習として残します。

+0

ありがとう!これは参考になりました – chrischrischris

関連する問題