我正在写一些适度的性能关键代码.此代码将位于最内部循环中,计算的运行时间以小时为单位.快速计算表明,在计算的某些变体中,此代码将执行大约10 ^ 12次.
因此,函数是计算sigmoid(X),另一个计算它的导数(gradient).Sigmoid具有以下属性:对于
y = sigmoid(x),dy/dx = y(1-y)
在python for numpy中,这看起来像:
sigmoid = vectorize(lambda(x): 1.0/(1.0+exp(-x)))
grad_sigmoid = vectorize(lambda (x): sigmoid(x)*(1-sigmoid(x)))
Run Code Online (Sandbox Code Playgroud)
可以看出,这两个函数都是纯粹的(没有副作用),因此它们是备忘的理想候选者,至少在短期内,我有一些担心缓存每次调用sigmoid所做的:存储10 ^ 12个浮点数将需要几TB的RAM.
有没有一种优化方法?
python会不会认为这些是纯函数并为我缓存它们?
我什么都不担心?
我正在尝试确定用于现实世界数据的最佳模型函数和参数。我有几个数据集,它们都表现出类似的指数衰减,我想计算每个数据集的拟合函数参数。
最大的数据集在 x 轴上从 1 到大约 1,000,000 不等,在 y 轴上从 0 到大约 10,000 不等。
我是 Numpy 和 Scipy 的新手,所以我尝试将这个问题的代码适应我的数据,但没有成功: 在没有初始猜测的情况下拟合指数衰减
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
import scipy as sp
import scipy.optimize
x = np.array([ 1., 4., 9., 16., 25., 36., 49., 64., 81., 100., 121.,
144., 169., 196., 225., 256., 289., 324., 361., 400., 441., 484.,
529., 576., 625., 676., 729., 784., 841., 900., 961., 1024., 1089.,
1156., 1225., 1296., 1369., 1444., …Run Code Online (Sandbox Code Playgroud)