python - 与 scipy.optimize.curve_fit 一起使用时迭代 python numpy 数组

标签 python numpy scipy

我需要迭代 numpy 数组中的元素,以便可以单独处理任何零元素。下面的代码适用于直接评估,但与 scipy.optimize.curve_fit() 一起使用时不适用。有没有办法让它与 curve_fit fn 一起工作?

import numpy as np
from matplotlib.pyplot import *
from scipy.optimize import curve_fit

def my_fn(x_array, b, a):
    y = []
    for x in np.nditer(x_array): #This doesn't work with curve_fit()
        if x == 0:
            y.append(0)
        else:
            y.append(b*(1/np.tanh(x/a) - a/x))
    return np.array(y)


x_meas = [0, 5, 20, 50, 100, 200, 600]
y_meas = [0, 0.275, 1.22, 1.64, 1.77, 1.84, 1.9]
xfit = np.linspace(0,600,601)
yfit2 = my_fn(xfit, 1.95, 8.2) #manual fit

#Not working
#popt, pcov = curve_fit(my_fn, x_meas, y_meas, p0=[1.95, 8.2]) 
#yfit1 = my_fn(xfit, *popt) #auto fit

figure(1)
plot(x_meas, y_meas, 'o', xfit, yfit2)
show()

最佳答案

为了使 larsmans' answer实际上,您还需要将数据样本转换为 NumPy 数组:

x_meas = numpy.array([0, 5, 20, 50, 100, 200, 600], float)
y_meas = numpy.array([0, 0.275, 1.22, 1.64, 1.77, 1.84, 1.9], float)

(转换y_meas并不是绝对必要的。)

这是 larsmans 的代码,其中包含了我的建议:

def my_fn(x, b, a):
    y = np.zeros_like(x)
    nonzero = x != 0
    x = x[nonzero]
    y[nonzero] = b*(1/np.tanh(x/a) - a/x)
    return y

关于python - 与 scipy.optimize.curve_fit 一起使用时迭代 python numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8533765/

相关文章:

python - python错误中的瑞典语字符

python - 一次将多个函数应用于 Pandas groupby 对象

python - 我正在尝试从 panda 数据框中删除额外的字符,并且我创建了一种方法来执行此操作。但是当从另一个方法调用时它不起作用

python - 如何使用 setuptools 安装 scipy 和 numpy

python - 绘制从一组到另一组的复杂函数

python - 模块 'fft' 中无名称 'scipy'

python - 如果该行不是 nan,则将前几个角色的值作为该行的值

python - 构建函数 saving_calculator(PMT, n, i )` that calculates your customer' s 退休时的储蓄

python - 使用 numpy.where 构建数组时,为什么我的数组长度为 1?

python - 傅里叶变换与 Numpy FFT