Python的速度太慢了

Python的速度太慢了,python,optimization,numpy,scipy,Python,Optimization,Numpy,Scipy,我在x_数据中有一个3x2000 numpy数组,在y_数据中有一个1x2000 numpy数组,我将其传递给这个函数regresse,以得到一条回归线。它很好用。问题是,我正在尝试做一些回溯测试,要测试1000种情况,我必须倒退1000次,运行这个程序大约需要5分钟 我试着标准化变量,但似乎没有加快速度 我还短暂地尝试了fmin_powell和fmin_bfgs,这似乎打破了它 有什么想法吗?谢谢 def regress(x_data, y_data, fg_spread, fg_line):

我在x_数据中有一个3x2000 numpy数组,在y_数据中有一个1x2000 numpy数组,我将其传递给这个函数regresse,以得到一条回归线。它很好用。问题是,我正在尝试做一些回溯测试,要测试1000种情况,我必须倒退1000次,运行这个程序大约需要5分钟

我试着标准化变量,但似乎没有加快速度

我还短暂地尝试了fmin_powell和fmin_bfgs,这似乎打破了它

有什么想法吗?谢谢

def regress(x_data, y_data, fg_spread, fg_line):

    theta = np.matrix(np.ones((1,x_data.shape[0]))*.11)
    hyp = lambda theta, x: 1 / (1 + np.exp(-(theta*x)))
    cost_hyp = lambda theta, x, y: ((np.multiply(-y,np.log10(hyp(theta,x)))) - \
                            (np.multiply((1-y),(np.log10(1-hyp(theta, x)))))).sum()

    theta = scipy.optimize.fmin(cost_hyp, theta, args=(x_data,y_data), xtol=.00001, disp=0)

    return hyp(np.matrix(theta),np.matrix([1,fg_spread, fg_line]).reshape(3,1))
用于使您的hyp和cost_hyp计算更快地进行评估。fmin函数族针对不同的条目多次计算这些函数。因此,这些函数的任何增益都直接在最小化中报告

例如,您将替换:

hyp = lambda theta, x: 1 / (1 + np.exp(-(theta*x)))
作者:


Numexpr适用于numpy阵列。

在添加和保存最小值时请注意?五分钟不一定很长;这确实是相对的(而且正好是你需要喝杯咖啡的时间)。另外,您将xtol设置为一个低10倍的因子;这可能会减慢速度。在这种情况下,“打破它”意味着什么?因为我想这些可能会快一点。乔兰,你能解释一下你的意思吗?感谢Severt,我使用了不同的θ值,但是当我使用fmin_bfgs时,我得到了这个错误消息警告(来自警告模块):文件“C:\Python27\nCalogistic.py”,第80行(np.multiply((1-y),(np.log10)(1-hyp(θ,xеЮ)))。sum()运行时警告:multiplyNicolas中遇到无效值,我对此进行了研究,但我不确定如何在这里使用numexpr。我看到两个问题。第一个numexpr似乎是用于简单的算术,所以我不确定如何将它用于线性代数和矩阵乘法?第二,我不确定你所说的“加强宣传和成本宣传”是什么意思,我对这些话题有点陌生,所以请你再给我解释几句。谢谢
hyp = lambda theta, x: numexpr.evaluate("1 / (1 + exp(-(theta*x)))")