我想制作一个N
长度的浮点数列表,其总和总是1,每个浮点数增加d
。
例如,让N = 4
和d = 0.01
:
期望的结果是这样的:
[0.90, 0.02, 0.03, 0.05]
[0.89, 0.02, 0.03, 0.06]
....
# And continues until all possible sums of 1 with the above settings is reached.
# An individual value CAN NOT = 0
我试图为此考虑一些逻辑,但我需要一些帮助。以前我曾问过类似性质的question,但是使用随机数而不是所有可能的组合。
答案 0 :(得分:2)
我认为itertools
使这很容易:
from itertools import permutations, ifilter
N = 4
d = 0.01
D = int(1/d)
perms = ifilter(lambda x: sum(x) < D, permutations(range(1,D-1), N-1))
tuples = []
for i in perms:
tuples.append(i + (D-sum(i),))
mylist = [ [ i*d for i in eachtuple ] for eachtuple in tuples ]
print mylist
我假设d
对于某个整数n
将是10 ^( - n),但这适用于具有整数倒数的任何东西(0.05和0.2应该有效,但不是0.03)
Floats浮动,你会得到一些浮点错误,你可以用嵌套列表理解中的适当round
来控制它。