用Python中的对数加速一个大循环

Est*_*ban 0 python performance matlab logarithm

我正在尝试加速以下代码:

from math import log
from random import random

def logtest1(N):
    tr=0
    for i in range(1,N):
        T= 40 + 10*random()
        tr += -log(random())/T
Run Code Online (Sandbox Code Playgroud)

我是python的新手(来自matlab)...而这个相同的代码在python中运行速度比matlab(和Julia)慢5倍,这引起了我的注意.

我尝试使用numba和一个长尾小鹦鹉包装器,而不是python的numpy函数,但根本没有任何改进.

我很感激任何帮助.谢谢.

编辑:整个事情是蒙特卡罗模拟,所以N非常大... 10e6用于测试目的

Car*_*ten 5

真的应该考虑numpy.而Scipy,当你在它的时候.Numpy是针对N维数组数字的速度优化包,而Scipy是基于numpy构建的科学计算的集合.

如果使用numpy数组编写函数,它看起来像这样:

def logtest2(N):
    T = 40. + 10. * np.random.rand(N)
    return np.sum(-1*np.log(np.random.rand(N)) / T)
Run Code Online (Sandbox Code Playgroud)

它也快得多.测试N = 1000000给了我一个500ms的运行时间版本和75ms的运行时间.