gpt4 book ai didi

python - 替代 scipy.optimize.curve_fit

转载 作者:太空狗 更新时间:2023-10-30 00:10:27 25 4
gpt4 key购买 nike

我正在尝试使用 matplotlib 绘制一些可视化图,并且在我的一个函数中,我检查波是否为对数。这是我当前的工作版本:

import numpy as np
def is_logarithmic(waves):

def expfunc(x, a, b, c):
return a*np.exp(b*x) + c

wcopy = list(waves)
wcopy.sort()

# If the ratio of x-max : x-min < 10, don't use a logarithmic scale
# (at least in matplotlib)
if (wcopy[-1] / wcopy[0]) < 10:
return False

# Take a guess at whether it is logarithmic by seeing how well the x-scale
# fits an exponential curve
diffs = []
for ii in range(len(wcopy) - 1):
diffs.append(wcopy[ii + 1] - wcopy[ii])

# Fit the diffs to an exponential curve
x = np.arange(len(wcopy)-1)
try:
popt, pcov = curve_fit(expfunc, x, diffs)
except Exception as e:
print e
popt = [0.0, 0.0, 0.0]
pcov = np.inf

# If a > 0.5 and covsum < 1000.0
# use a logarithmic scale.
if type(pcov) == float:
# It's probably np.inf
covsum = pcov
else:
covsum = pcov.diagonal().sum()
res = (covsum < 1000.0) & (popt[0] > 0.5)
return res

我正在尝试寻找 scipy 的 curve_fit() 的替代方法,因为我不想安装这么大的库只是为了使用那个函数。是否有其他我可以使用的东西,或者理想情况下仅使用 numpy 和 matplotlib 的其他函数的组合,以获得类似的结果?

最佳答案

Numpy 可以进行线性拟合 (numpy.linalg.lstsq) 和多项式拟合 (numpy.polyfit)。通常,您需要 scipy 来适应您自己定义的函数(scipy 使用 fortran minpack 而 numpy 仅使用 C 构建)。

但是,对于您的示例,您可以使用与 this 类似的方法适合exp的问题。基本上,取等式两边的对数并使用 numpy.polyfit

关于python - 替代 scipy.optimize.curve_fit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31283313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com