2017-08-14 8 views
0

のは、私は私が投資しています国のリストを持っているとしましょう:ランダムウェイトをPythonのリストに追加するには?

Angola Croatia Denmark Germany ... 

私は基本的にすべてが100%にならこれらの国々への重みをランダム化するにはどうすればよい - 私は上の最適化テストを実行するために探しています私の投資:

Angola Croatia Denmark Germany ... 
1.3% 3.8%  4.6%  7.5% ... (sum equals 100%) 

ランダム化の背後にある論理は非常に単純ですが、私はそれを行う簡単な方法があるのだろうかと思っていましたか?私の現在の論理は、すべての乱数の合計を取って、それらのすべてに乱数を割り当て、割り当てられた数を合計で割ったものです。

これらのウェイトを正しく計算し、これらのウェイトを使用してPandas DataFrameを使用して新しい行を追加するにはどうすればよいですか? for-allステートメントをどのように設定すればよいですか?

+0

だからあなたは* *これらの重みを生成するために探していますか?それらをN列に無作為に配布しますが、常に最大100を追加しますか? –

+0

はい@MartijnPieters - 正確に – sgerbhctim

答えて

1

numpyまたはpandasを使用せずにこれを達成することは可能です。 randomパッケージを使用してN個の乱数を生成し、正規化します(生成されたすべての数の合計で各数を除算します)。これは、[0、1]の間隔で数字のリストを生成します。 [0、100]の間隔にスケーリングする必要がある場合は、数字に100を掛けてください。

例:

>>> import random 
>>> n = 10 
>>> weights = [random.random() for _ in range(n)] 
>>> sum_weights = sum(weights) 
>>> weights = [100*w/sum_weights for w in weights] 
>>> print(weights) 
[9.341865975454088, 
12.351871555212776, 
11.613836128975514, 
9.37242716105095, 
7.74809967908834, 
9.239611881353285, 
5.432249328415935, 
11.384334820466387, 
13.436859772362507, 
10.07884369762022] 
関連する問題