簡體   English   中英

Python curve_fit “對象太深,無法滿足所需陣列”

[英]Python curve_fit "object too deep for desired array"

我想 plot 這個 function ( y = a * ln(x) + b ) 在 python。 這是我的代碼:

def func(x, a, b):
return a * np.log(x) + b

popt, _ = curve_fit(func, x, y)
a, b = popt
x_line = arrange(min(x), max(x), 1)
y_line = func(x_line, a, b)
plt.plot(x_line, y_line)
plt.show()

我的“x”包含這個

array([[1790],
       [1800],
       [1810],
       [1820],
       [1830],
       [1840],
       [1850],
       [1860],
       [1870],
       [1880],
       [1900],
       [1910],
       [1920],
       [1930],
       [1940],
       [1950],
       [1960],
       [1970],
       [1980],
       [1990],
       [2000],
       [2010]], dtype=int64)

和我的“y”這個

array([[  3.929214],
       [  5.308483],
       [  7.239881],
       [  9.638453],
       [ 12.86602 ],
       [ 17.069453],
       [ 23.191876],
       [ 31.443321],
       [ 39.818449],
       [ 50.189209],
       [ 76.212168],
       [ 92.228496],
       [106.021537],
       [123.202624],
       [132.164569],
       [151.325798],
       [179.323175],
       [203.302031],
       [226.542199],
       [248.718302],
       [281.424603],
       [308.745538]])

但是當我運行代碼時,我總是得到這個錯誤:

object too deep for desired array

我希望有人可以幫助我,因為我花了很多時間在這上面。

嘗試重塑您的 arrays:

popt, _ = curve_fit(func, x.reshape(-1), y.reshape(-1))

您的xy變量是 2D (22 x 1) arrays,因為當scipy.optimize.curve_fit需要 1D ZA3CBC3F9D0CE2F2C1554E1B671D7 時,內部有一組方括號。

您可以刪除內括號或切片xy

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

def func(x, a, b):
  return a * np.log(x) + b

popt, _ = curve_fit(func, x[:,0], y[:,0])
a, b = popt
x_line = np.arange(min(x), max(x), 1)
y_line = func(x_line, a, b)
plt.plot(x_line, y_line)
plt.show()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM