我写了这段代码。但是它的工作非常缓慢。
我将再次重复所有这10 ** 4度以找到算术平均值。
帮我加快这段代码的速度。工作极其缓慢。我将不胜感激。没有第三方库谢谢!
答案 0 :(得分:2)
这是使用numba加速代码的一种简单方法:
m2 = numba.jit(nopython=True)(math)
ipython中的时间:
%timeit math(inv)
每个循环1.44 s±16.3毫秒(平均±标准偏差,共运行7次,每个循环1次)
%timeit -n 7 m2(inv)
每个循环10.4 ms±177 µs(平均±标准偏差,共运行7次,每个循环100次)
这会将您的代码加速100倍以上。
答案 1 :(得分:0)
您不需要所有这些循环。 numpy.random.randint()
可以生成一个给定大小的数组,其中包含low
和high
之间的随机整数,因此
np.random.randint(1, 45, (1000, 10000))
将生成一个由500行和10k列组成的矩阵,其中填充有随机数。然后,您要做的就是计算包含6(Numpy: find first index of value fast)的每一列的第一行。然后
max_tries = 1000
def do_math(inv):
rands = np.random.randint(1, 45, (max_tries, 10000))
first_inv = np.argmax(rands < inv, axis=0)
counter = first_inv.mean()
return counter
这并不是您想要的功能完全,而是我发现您的所有循环都非常复杂,因此这应该为您指明正确的方向,您可以根据自己的需要随意调整此代码。此功能将为您提供获得小于inv
的随机数(平均超过10000次实验)所需的尝试次数。