[英]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))
您的x
和y
變量是 2D (22 x 1) arrays,因為當scipy.optimize.curve_fit
需要 1D ZA3CBC3F9D0CE2F2C1554E1B671D7 時,內部有一組方括號。
您可以刪除內括號或切片x
和y
:
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.