【发布时间】:2022-01-05 13:48:51
【问题描述】:
我正在尝试创建一个包含 0.005 到 0.045 之间的 N 个随机数的列表(称为权重),总和等于 1。N 可以是 22 到 200 之间的任何整数。因此有以下限制:
- 权重中的数字数 = N
- 对于每 n 个权重:0.005
- 所有 n 的权重之和 = 1
我认为第一个限制很容易。另外,我知道如何解决彼此分开的第二个和第三个限制。但我不知道如何将它们组合成一段代码。
- 第二个限制:0.005
import numpy as np
import random
weights_step1 = np.random.randint(min=5, max = 45, size = N)
weights = []
for weight in weights_step1:
weights.append(weight/1000)
- 第三个限制
Generating a list of random numbers, summing to 1
有谁知道如何将这两个限制合并到一段代码中?
【问题讨论】:
-
如果 N 小于 22 或大于 200 怎么办?
-
看起来你的问题有一个缺陷,如果 N 可以是任意的并且权重只能从 0.005 到 0.045,如果我给 N 像 5 你无论如何都不能满足你的问题。
-
@mkrieger1 是的,你是对的。在我的情况下,这是一个 N 约为 50 的投资组合
-
@Bruno 我会编辑帖子,我的 N 大约是 50
-
@JonSG 嗯?!狄利克雷分布是约束到所需总和的完美示例
标签: python list numpy random sum