函数调用的结果不是浮点数数组

时间:2018-12-25 22:38:15

标签: python numpy scipy curve-fitting

在前两篇文章(post1post 2)之后,我现在到达了使用scipy寻找曲线拟合的地步。但是,我的代码产生了错误。

我正在使用的.csv文件的示例位于post1中。我试图从Internet复制和替换示例,但似乎不起作用。

这就是我所拥有的(.py文件)

import pandas as pd
import numpy as np
from scipy import optimize

df = pd.read_csv("~/Truncated raw data hcl.csv", usecols=['time' , '1mnaoh trial 1']).dropna()
data1 = df

array1 = np.asarray(data1)
x , y = np.split(array1,[-1],axis=1)

def func(x, a , b , c , d , e):
    return a + (b - a)/((1 + c*np.exp(-d*x))**(1/e))

popt, pcov = optimize.curve_fit(func, x , y , p0=[23.2, 30.1 , 1 , 1 , 1])

popt

根据我所做的有限研究,可能是x和y数组有问题。标题说明了所写的错误。这是minpack.error

编辑:错误返回

ValueError: object too deep for desired array
Traceback (most recent call last):
  File "~/test2.py", line 15, in <module>
    popt, pcov = optimize.curve_fit(func, x , y , p0=[23.2, 30.1 , 1 , 1 , 1])
  File "~/'virtualenvname'/lib/python3.7/site-packages/scipy/optimize/minpack.py", line 744, in curve_fit
res = leastsq(func, p0, Dfun=jac, full_output=1, **kwargs)
  File "~/'virtualenvname'/lib/python3.7/site-packages/scipy/optimize/minpack.py", line 394, in leastsq
    gtol, maxfev, epsfcn, factor, diag)
minpack.error: Result from function call is not a proper array of floats.

谢谢。

1 个答案:

答案 0 :(得分:3)

分割后,x和y的形状为(...,1)。这意味着它们每个元素本身都是长度为一的数组。您想先展平数组,即通过x = np.flatten(x)。 但我认为您根本不需要拆分。您可以执行以下

array1 = np.asarray(data1).T
x , y = array1

您希望x和y成为array1的第一和第二列。因此,实现此目的的一种简单方法是先转置数组。您也可以通过[:,0][:,1]访问它们。