我用Python编写了以下函数,返回幂分布的权重
import math
def get_power_distribution(distribution_count=8, power_distribution=1.3):
repartition = [math.pow(power_distribution, i + 1) for i in range(distribution_count)]
repartition_sum = sum(repartition)
distribution = [val / repartition_sum for val in repartition]
return distribution
它将1
^ power_distribution
幂到distribution_count
^ power_distribution
,对所有结果求和,然后告诉每个幂代表和的哪一部分。
返回的分配和等于100%,1.0
res=get_power_distribution(3,10)
[0.009009009009009009, 0.09009009009009009, 0.9009009009009009]
sum(res)
1.0
我想决定返回列表的第一项是什么而不是0.009009009009009009作为res[0]我想计算power_distribution
会给我0.01
这个distribution_count
函数的新签名可以是
一个二个一个一个
用sympy或scipy解决它似乎是可能的。
我想到了这样一件事:
def base_to_power(target,distib_count):
from sympy import symbols, solve
x = symbols('x')
expr = x * sum([x**(i+1) for i in range(distib_count)]) - target # Exact opposite of res[0] from get_power_distribution
res = solve(expr)
return res
1条答案
按热度按时间vsikbqxv1#
您可以编写自己的二分例程来对像这样的函数进行二分
然后
或者你可以写一个允许符号输入的函数(ala SymPy),然后使用现有的
nsolve
:将math.pow
更改为sympy.Pow
并导入sympy而不是math.如果你使用符号形式,你也可以得到一个
x
的多项式,你想解决。因为它的阶数比计数少1,可能没有一个封闭的形式的解决方案,但你可以很容易地计算根(迭代)到任何你想要的精度。不是迭代的部分是要解决的表达式的创建,例如。