擅长:python、mysql、java
<p>我已经能够通过利用numpy矢量化来加速您的代码:</p>
<pre><code>import numpy as np
import time
two52 = 2**52
crash = lambda x: np.floor( ( 100 * two52 - x ) / ( two52 - x ) ) / 100
starttime = time.time()
icur = 0
ispan = 100000
crashes_sum = 0
while icur < two52-ispan:
i = np.arange(icur, icur+ispan, 1)
crashes_sum += np.sum(crash(i))
icur += ispan
crashes_sum += np.sum(crash(np.arange(icur, two52, 1)))
expected_crash = crashes_sum / two52
print(time.time() - starttime)
</code></pre>
<p>诀窍是计算移动窗口上的和,以利用numpy的矢量化(用C编写)。我尝试了2**30,在我的笔记本电脑上花了9秒(而且太长了,你的代码无法进行基准测试)。你知道吗</p>
<p>Python可能不是最适合您的语言,您可以尝试C或Fortran(并利用线程)。你知道吗</p>