如何制作一个总和为 1 的随机列表,每个元素的最小和最大限制?
python 181
原文标题 :How to make a random list with a sum of 1 with minimum and maximum limits for each element?
我目前正在使用 python 进行一个多空投资组合优化项目。
问题是我必须生成一个总和为 1 的列表,并且列表的每个元素都应该大于或等于 -1 并且小于等于 5。
列表的长度也必须为 5。
有没有办法可以列出这样的清单?
回复
我来回复-
BrokenBenchmark 评论
您可以使用基于拒绝抽样的方法。生成一个包含五个元素的列表,如果它们的总和不是一个,则重复生成一个新列表,直到找到一个总和为 1 的列表:
import random result = [random.randint(-1, 5) for _ in range(5)] while sum(result) != 1: result = [random.randint(-1, 5) for _ in range(5)]
2年前 -
donkopotamus 评论
该回答已被采纳!
由于权重总和必须为
1
的约束,这里只有四个随机源。因此,为前四个资产生成潜在权重:weights = [random.uniform(-1, 5) for i in range(4)]
然后推断最终重量
final_weight = 1 - sum(weights)
是否满足要求。所以像:def generate_weights(): while True: weights = [random.uniform(-1, 5) for i in range(4)] weights.append(1 - sum(weights)) if -1 <= weights[-1] <= 5: return weights
2年前