【问题标题】:Create an array that sums to a specific number?创建一个总和为特定数字的数组?
【发布时间】:2017-12-07 07:00:20
【问题描述】:

我正在使用 python。我正在尝试创建一个总和为某个数字的数组,但我希望该数组具有我选择的长度。关于如何做到这一点的任何想法? 例如,我想要一个总和为 1 的数组。 所以 [.25,.25,.25,.25],但我希望数组中的数字是随机的,并且我希望我的数组的长度为 98。 有人可以帮忙吗?

【问题讨论】:

标签: python numpy


【解决方案1】:

这是一个简单的实现,它通过构建一个由 98 个随机数组成的数组,找到它们的总和,然后将每个数字除以总和,从而使整个数组标准化为 1。

import random

# generate a random array of 98 numbers
numbers = [random.random() for _ in range(98)]
print(numbers) 
# [0.2378205280188267, 0.08942239291741982, ...]
print(sum(numbers))
# 48.8051742287

# normalise the array to sum to 1
normalised = [r / sum(numbers) for r in numbers]
print(normalised) 
# [0.004872854810521523, 0.0018322318141581963, ...]
print(sum(normalised)) 
# 1.0

但如果您要进行大量计算,您可能应该考虑使用 NumPy。

编辑:与上面的等效代码,但更易于阅读且无需列表理解:

# build a list/array of random numbers
numbers = []
for _ in range(98):
    numbers.append(random.random())

# get the sum of the array
print(sum(numbers))  
# 48.8051742287

# normalise the original list using the sum
normalised = []
for n in numbers:
    normalised.append(n / sum(numbers))
print(sum(normalised)) 
# 1.0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 2020-03-22
    • 1970-01-01
    • 2019-11-15
    相关资源
    最近更新 更多