将Pareto概率应用于Python中的n个项目

时间:2017-09-18 04:18:38

标签: python numpy

给出按排序顺序的列表:

countries = ['USA', 'GB', 'RU', 'CN']

如何为np.pareto中的每个项目分配countries个概率?总概率不应大于1.0

期望的结果:

countries = [{
              {"name": "USA",
               "power": 0.24},
              {...}
             }]

我稍后会像这样访问数据:

np.random.choice(countries[name], p=countries[power])

1 个答案:

答案 0 :(得分:1)

您需要np.random.pareto的形状参数,我假设您只需要一个字典列表,而不是包含一个包含字典的集合的列表。这可能是您正在寻找的:

import numpy as np

countries = ['USA', 'GB', 'RU', 'CN']
pareto_shape = 1.

prob = np.random.pareto(pareto_shape, len(countries))
prob /= np.sum(prob)

out_list = []
for p, country in zip(prob, countries):
    out_list.append({
        'name': country,
        'power': p,
    })
print(out_list)

至少,这会给你一些看起来像

的东西
[
    {"name": "USA",
     "power": 0.24},
    {...}
]

但是如果您想使用np.random.choice访问数据,那么您真正想要使用的是

import numpy as np

countries = ['USA', 'GB', 'RU', 'CN']
pareto_shape = 1.

prob = np.random.pareto(pareto_shape, len(countries))
prob /= np.sum(prob)

print(np.random.choice(countries, p=prob))