如何按降序生成总和为 1 的浮点数列表?

adn*_*leb 1 python math equation series

我想生成一个大小为 M 的浮点数列表,其中列表中的每个项目都大于其他处理项目,即降序。并且列表的总和必须为 1。对于相同的 M 量级,我可以生成多个符合给定约束的列表。

我正在考虑以下形式的方程:

Xi+1 = compute([Xi,Xi-1...X0], M, Random)
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚这个功能的范围。先感谢您。

Jea*_*bre 5

好的,那么让我们从 0 到 10 中挑选 10 个随机数,然后对它们进行排序。然后计算 sum 并用每个元素除以这个 sum 重建一个新列表:

import random

# create a non-normalized ascending list of numbers
lst = sorted(random.uniform(0,10) for _ in range(10))
# compute the sum
temp_sum = sum(lst)
# now divide each member by the sum to normalize the list
lst = [i/temp_sum for i in lst]

print(lst,sum(lst))
Run Code Online (Sandbox Code Playgroud)

一种输出可能是:

[0.0340212528820301, 0.05665995400192079, 0.07733861892990018,
 0.07752841352220373, 0.08556431469182045, 0.11628857362899164,      
0.11706017358757258, 0.12523809404875455, 0.14272942597136748, 
0.16757117873543856] 1.0
Run Code Online (Sandbox Code Playgroud)

由于浮点不准确,总和可能不完全是 1,但会非常接近。