2017-08-14 127 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添加具有這些權重的新行?我將如何建立一個全面的聲明?

+0

所以,你正在尋找*農產品*的權重?將它們隨機分佈在N列中,但始終加起來爲100? –

+0

是的@MartijnPieters - 完全 – sgerbhctim

回答

1

有可能在不使用numpypandas的情況下實現此目的。您可以簡單地使用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]