我想画一个包含二项式系数的函数。我的密码是
#!/usr/bin/python
from __future__ import division
from scipy.special import binom
import matplotlib.pyplot as plt
import math
max = 500
ycoords = [sum([binom(n,w)*sum([binom(w,k)*(binom(w,k)/2**w)**(4*n/math.log(n)) for k in xrange(w+1)]) for w in xrange(1,n+1)]) for n in xrange(2,max)]
xcoords = range(2,max)
plt.plot(xcoords, ycoords)
plt.show()
不幸的是,这永远不会结束。如果你把最大值减少到40,就说它很好。有没有办法画出这个函数?在
我也担心scipy.special.binom公司可能不会给出准确的答案,因为它似乎是在浮点运算。在
通过使用numpy计算内环,可以获得显著的加速。首先将
max
更改为N
(因为max
是一个内置函数),然后将函数分解为更小、更易于管理的块:使用}使用旧代码。我甚至没有计算
N=300
作为测试,它需要3.932s
和numpy代码,但是{N=500
案例的时间,因为你的旧代码花了这么长时间!在值得指出的是,你的函数基本上是指数增长的,可以近似为指数增长。您可以在
semilogx
图中看到:相关问题 更多 >
编程相关推荐