【发布时间】:2021-12-27 18:24:43
【问题描述】:
我需要生成两个总和为特定数字的列表(我们称它们为 X 和 Y)。
我需要创建的函数将 X 和 Y 的长度以及总和作为输入。
然后它为 X 创建随机正数,为 Y 创建负数,并将它们归一化以求和为我想要的数字。
我试过这样做:
def extractAmount(ina, outa, balance):
# ina: length of X, outa: length of Y, balance: the number I want
valin = random.random((1, ina)) # X
valout = -random.random((1, outa)) # Y
val = np.concatenate([valin[0], valout[0]])
valf = (np.round(val / abs(np.sum(val)) * abs(balance))).tolist()
return valf
该代码适用于正数和负数balance,如果balance == 0,我该如何改进它?
如果我做extractAmount(2, 3, 100),输出是[49.0, 350.0, -44.0, -68.0, -186.0],我的问题是如果我做extractAmount(2, 3, 0),它返回[0.0, 0.0, 0.0, 0.0, 0.0],而我需要它是随机值,而不是全零。
【问题讨论】:
-
我对你真正想要的东西感到困惑。您说该函数采用每个列表的长度,但根据您的代码,ina 是正数的最大值,outa 是负数的最大值。
-
您应该提供输入/输出示例
-
ina 和 outa 是我想要的 X 和 Y 的长度(在代码 valin 和 valout 中)。通过使用 random.random((1,3)) (如 ina=3),我在一个数组中获得了 3 个随机数,我错了吗?
-
@DuccioBorchi 您使用的是 Python 2 还是 3?随机模块对我来说不起作用。将元组传递给 random.random 会导致参数异常
-
Python 3 对我有用