使用 curve_fit 拟合 datetime.datetime 格式
Fitting a datetime.datetime format with curve_fit
我有下面的代码,我的问题是格式“datetime.datetime”,我无法使用高斯函数拟合它。
import numpy as np
import datetime as datetime
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from scipy.optimize import curve_fit
#ydata
Temperature = ([1.05436258e+03, 1.09296819e+03, 1.05145602e+03, 1.05894926e+03,
1.08366115e+03, 1.08066721e+03, 1.04696163e+03, 1.01842441e+03,
1.04944307e+03, 1.06891551e+03, 1.01844764e+03, 1.03511906e+03,
1.02044599e+03, 9.93275818e+02, 1.03741013e+03, 1.00540470e+03,
1.02573646e+03, 9.75301913e+02, 1.00045743e+03, 1.03321562e+03,
1.03731104e+03, 9.68730834e+02, 9.07474634e+02, 9.30465587e+02,
9.98967526e+02, 9.11791887e+02, 9.15951873e+02, 8.29331306e+02,
9.31702088e+02, 8.90075633e+02, 8.30659093e+02, 8.78715978e+02,
8.66238768e+02, 8.97958014e+02, 6.77909787e+02, 2.23437657e-01,
9.40495055e+02, 8.41990924e+02, 8.75391469e+02, 8.98393043e+02,
9.25048353e+02, 9.31445104e+02, 9.04151363e+02, 2.28176362e-01,
9.65550728e+02, 9.16348809e+02, 9.36315168e+02, 9.00445995e+02,
8.87768320e+02, 8.75064126e+02, 8.81480871e+02, 8.78240278e+02,
8.62958271e+02, 8.93813659e+02, 8.83678318e+02, 9.23593998e+02,
9.15524580e+02, 8.77919073e+02, 8.91754242e+02, 9.19274917e+02,
8.62223914e+02, 8.81275387e+02, 8.62331470e+02, 8.69461632e+02,
8.90014577e+02, 9.02656117e+02, 8.74446393e+02, 8.76284046e+02,
8.66751916e+02, 8.54095049e+02, 8.44540741e+02, 8.70263794e+02,
8.66687327e+02, 8.18019291e+02, 8.21875267e+02, 8.13385138e+02,
8.43198211e+02, 8.70558259e+02, 7.94039978e+02, 8.13497634e+02,
8.12217789e+02, 8.01361143e+02, 8.00263045e+02, 7.47101493e+02,
7.35923635e+02, 7.32930255e+02, 7.75930026e+02, 7.83786631e+02,
7.75255742e+02, 7.74938671e+02, 7.04186773e+02, 7.47612911e+02,
7.29315237e+02, 6.94021293e+02, 7.42723487e+02, 7.09890191e+02,
7.60674339e+02, 7.51491228e+02, 7.23875166e+02, 7.41451471e+02,
7.49694410e+02, 7.43337883e+02, 7.00286359e+02, 7.20250078e+02,
7.32189596e+02, 6.93097572e+02, 7.82342462e+02, 7.11995854e+02,
6.84432159e+02, 7.61195087e+02, 7.46725427e+02, 7.44614939e+02,
6.48985204e+02, 6.76023106e+02, 6.89141056e+02, 6.27855922e+02,
7.07298358e+02, 6.52207871e+02, 6.52609278e+02, 6.80525240e+02,
6.89328581e+02, 6.78148423e+02, 7.28229663e+02, 6.91857497e+02,
7.43998987e+02, 6.96885527e+02, 7.33249599e+02, 7.22833678e+02,
7.34832942e+02, 7.19049095e+02, 7.03573908e+02, 7.11151460e+02,
6.89345427e+02, 6.14126253e+02, 4.60412424e+02])
#xdata
time=[datetime.datetime(2015, 11, 7, 18, 14, 24),
datetime.datetime(2015, 11, 7, 18, 19, 12),
datetime.datetime(2015, 11, 7, 18, 23, 9),
datetime.datetime(2015, 11, 7, 18, 26, 38),
datetime.datetime(2015, 11, 7, 18, 29, 55),
datetime.datetime(2015, 11, 7, 18, 32, 52),
datetime.datetime(2015, 11, 7, 18, 35, 36),
datetime.datetime(2015, 11, 7, 18, 38, 26),
datetime.datetime(2015, 11, 7, 18, 41, 13),
datetime.datetime(2015, 11, 7, 18, 44, 16),
datetime.datetime(2015, 11, 7, 18, 47, 12),
datetime.datetime(2015, 11, 7, 18, 50, 1),
datetime.datetime(2015, 11, 7, 18, 53, 2),
datetime.datetime(2015, 11, 7, 18, 56, 17),
datetime.datetime(2015, 11, 7, 18, 59, 45),
datetime.datetime(2015, 11, 7, 19, 3, 14),
datetime.datetime(2015, 11, 7, 19, 6, 28),
datetime.datetime(2015, 11, 7, 19, 10, 4),
datetime.datetime(2015, 11, 7, 19, 13, 46),
datetime.datetime(2015, 11, 7, 19, 17, 47),
datetime.datetime(2015, 11, 7, 19, 21, 35),
datetime.datetime(2015, 11, 7, 19, 25, 15),
datetime.datetime(2015, 11, 7, 19, 29, 22),
datetime.datetime(2015, 11, 7, 19, 33, 41),
datetime.datetime(2015, 11, 7, 19, 38, 38),
datetime.datetime(2015, 11, 7, 19, 43, 16),
datetime.datetime(2015, 11, 7, 19, 47, 53),
datetime.datetime(2015, 11, 7, 19, 53, 21),
datetime.datetime(2015, 11, 7, 19, 59, 4),
datetime.datetime(2015, 11, 7, 20, 5, 14),
datetime.datetime(2015, 11, 7, 20, 11, 6),
datetime.datetime(2015, 11, 7, 20, 17, 7),
datetime.datetime(2015, 11, 7, 20, 24, 11),
datetime.datetime(2015, 11, 7, 20, 31, 5),
datetime.datetime(2015, 11, 7, 20, 38, 1),
datetime.datetime(2015, 11, 7, 20, 44, 39),
datetime.datetime(2015, 11, 7, 20, 50, 8),
datetime.datetime(2015, 11, 7, 20, 54, 31),
datetime.datetime(2015, 11, 7, 20, 59, 28),
datetime.datetime(2015, 11, 7, 21, 4, 54),
datetime.datetime(2015, 11, 7, 21, 10, 24),
datetime.datetime(2015, 11, 7, 21, 15, 56),
datetime.datetime(2015, 11, 7, 21, 21, 50),
datetime.datetime(2015, 11, 7, 21, 27, 38),
datetime.datetime(2015, 11, 7, 21, 33, 24),
datetime.datetime(2015, 11, 7, 21, 37, 54),
datetime.datetime(2015, 11, 7, 21, 42, 24),
datetime.datetime(2015, 11, 7, 21, 47, 20),
datetime.datetime(2015, 11, 7, 21, 52, 12),
datetime.datetime(2015, 11, 7, 21, 57, 3),
datetime.datetime(2015, 11, 7, 22, 1, 41),
datetime.datetime(2015, 11, 7, 22, 6, 21),
datetime.datetime(2015, 11, 7, 22, 11, 30),
datetime.datetime(2015, 11, 7, 22, 16, 44),
datetime.datetime(2015, 11, 7, 22, 21, 59),
datetime.datetime(2015, 11, 7, 22, 26, 56),
datetime.datetime(2015, 11, 7, 22, 32),
datetime.datetime(2015, 11, 7, 22, 37, 43),
datetime.datetime(2015, 11, 7, 22, 43, 21),
datetime.datetime(2015, 11, 7, 22, 48, 45),
datetime.datetime(2015, 11, 7, 22, 53, 49),
datetime.datetime(2015, 11, 7, 22, 58, 49),
datetime.datetime(2015, 11, 7, 23, 4, 4),
datetime.datetime(2015, 11, 7, 23, 9, 8),
datetime.datetime(2015, 11, 7, 23, 14, 3),
datetime.datetime(2015, 11, 7, 23, 18, 34),
datetime.datetime(2015, 11, 7, 23, 22, 58),
datetime.datetime(2015, 11, 7, 23, 27, 43),
datetime.datetime(2015, 11, 7, 23, 32, 22),
datetime.datetime(2015, 11, 7, 23, 36, 48),
datetime.datetime(2015, 11, 7, 23, 41, 9),
datetime.datetime(2015, 11, 7, 23, 45, 29),
datetime.datetime(2015, 11, 7, 23, 49, 59),
datetime.datetime(2015, 11, 7, 23, 54, 34),
datetime.datetime(2015, 11, 7, 23, 59, 6),
datetime.datetime(2015, 11, 8, 0, 3, 37),
datetime.datetime(2015, 11, 8, 0, 8, 17),
datetime.datetime(2015, 11, 8, 0, 13, 15),
datetime.datetime(2015, 11, 8, 0, 18, 22),
datetime.datetime(2015, 11, 8, 0, 23, 23),
datetime.datetime(2015, 11, 8, 0, 28, 28),
datetime.datetime(2015, 11, 8, 0, 33, 59),
datetime.datetime(2015, 11, 8, 0, 39, 51),
datetime.datetime(2015, 11, 8, 0, 45, 56),
datetime.datetime(2015, 11, 8, 0, 51, 57),
datetime.datetime(2015, 11, 8, 0, 57, 48),
datetime.datetime(2015, 11, 8, 1, 4, 2),
datetime.datetime(2015, 11, 8, 1, 10, 47),
datetime.datetime(2015, 11, 8, 1, 17, 43),
datetime.datetime(2015, 11, 8, 1, 24, 22),
datetime.datetime(2015, 11, 8, 1, 30, 39),
datetime.datetime(2015, 11, 8, 1, 37, 2),
datetime.datetime(2015, 11, 8, 1, 43, 51),
datetime.datetime(2015, 11, 8, 1, 50, 38),
datetime.datetime(2015, 11, 8, 1, 57, 23),
datetime.datetime(2015, 11, 8, 2, 4, 3),
datetime.datetime(2015, 11, 8, 2, 10, 46),
datetime.datetime(2015, 11, 8, 2, 18, 6),
datetime.datetime(2015, 11, 8, 2, 25, 14),
datetime.datetime(2015, 11, 8, 2, 32, 30),
datetime.datetime(2015, 11, 8, 2, 39, 35),
datetime.datetime(2015, 11, 8, 2, 46, 49),
datetime.datetime(2015, 11, 8, 2, 54, 43),
datetime.datetime(2015, 11, 8, 3, 2, 33),
datetime.datetime(2015, 11, 8, 3, 10, 15),
datetime.datetime(2015, 11, 8, 3, 17, 28),
datetime.datetime(2015, 11, 8, 3, 24, 30),
datetime.datetime(2015, 11, 8, 3, 32, 8),
datetime.datetime(2015, 11, 8, 3, 39, 13),
datetime.datetime(2015, 11, 8, 3, 46, 10),
datetime.datetime(2015, 11, 8, 3, 52, 48),
datetime.datetime(2015, 11, 8, 3, 59, 1),
datetime.datetime(2015, 11, 8, 4, 5, 39),
datetime.datetime(2015, 11, 8, 4, 11, 59),
datetime.datetime(2015, 11, 8, 4, 18, 27),
datetime.datetime(2015, 11, 8, 4, 24, 49),
datetime.datetime(2015, 11, 8, 4, 31, 7),
datetime.datetime(2015, 11, 8, 4, 39, 18),
datetime.datetime(2015, 11, 8, 4, 46, 26),
datetime.datetime(2015, 11, 8, 4, 53, 13),
datetime.datetime(2015, 11, 8, 5, 0, 11),
datetime.datetime(2015, 11, 8, 5, 8, 57),
datetime.datetime(2015, 11, 8, 5, 15, 45),
datetime.datetime(2015, 11, 8, 5, 22, 6),
datetime.datetime(2015, 11, 8, 5, 28, 5),
datetime.datetime(2015, 11, 8, 5, 34, 57),
datetime.datetime(2015, 11, 8, 5, 40, 4),
datetime.datetime(2015, 11, 8, 5, 44, 45),
datetime.datetime(2015, 11, 8, 5, 49, 8),
datetime.datetime(2015, 11, 8, 5, 54, 41),
datetime.datetime(2015, 11, 8, 5, 58, 46),
datetime.datetime(2015, 11, 8, 6, 2, 35),
datetime.datetime(2015, 11, 8, 6, 6, 18),
datetime.datetime(2015, 11, 8, 6, 11, 11),
datetime.datetime(2015, 11, 8, 6, 14, 45)]
#ploting data
#plt.plot(time, Temperature)
#plt.show()
#curve_fit
def fun(x, A, B) :
return A*np.exp(-1*B*x**2)
parameters, covariance = curve_fit(fun, time, Temperature)
plt.plot(time, fun(time, *parameters))
plt.show()
这是执行结果吧:
Traceback (most recent call last): File "datetime_fit.py", line 187,
in
parameters, covariance = curve_fit(fun, time, Temperature) File "/home/lhoussine/anaconda3/lib/python3.8/site-packages/scipy/optimize/minpack.py",
line 742, in curve_fit
xdata = np.asarray_chkfinite(xdata, float) File "/home/lhoussine/anaconda3/lib/python3.8/site-packages/numpy/lib/function_base.py",
line 486, in asarray_chkfinite
a = asarray(a, dtype=dtype, order=order) TypeError: float() argument must be a string or a number, not 'datetime.datetime'
您需要使用日期和时间的数字表示,例如可以从日期时间对象的 timestamp 方法获取的 Unix 时间。例如:
def fun(x, A, B) :
return A*x + B # a simple linear fit for illustration
ts = np.array([t.timestamp() for t in time])
parameters, covariance = curve_fit(fun, ts, Temperature)
plt.plot(time, Temperature)
plt.plot(time, fun(ts, *parameters))
plt.show()
我有下面的代码,我的问题是格式“datetime.datetime”,我无法使用高斯函数拟合它。
import numpy as np
import datetime as datetime
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from scipy.optimize import curve_fit
#ydata
Temperature = ([1.05436258e+03, 1.09296819e+03, 1.05145602e+03, 1.05894926e+03,
1.08366115e+03, 1.08066721e+03, 1.04696163e+03, 1.01842441e+03,
1.04944307e+03, 1.06891551e+03, 1.01844764e+03, 1.03511906e+03,
1.02044599e+03, 9.93275818e+02, 1.03741013e+03, 1.00540470e+03,
1.02573646e+03, 9.75301913e+02, 1.00045743e+03, 1.03321562e+03,
1.03731104e+03, 9.68730834e+02, 9.07474634e+02, 9.30465587e+02,
9.98967526e+02, 9.11791887e+02, 9.15951873e+02, 8.29331306e+02,
9.31702088e+02, 8.90075633e+02, 8.30659093e+02, 8.78715978e+02,
8.66238768e+02, 8.97958014e+02, 6.77909787e+02, 2.23437657e-01,
9.40495055e+02, 8.41990924e+02, 8.75391469e+02, 8.98393043e+02,
9.25048353e+02, 9.31445104e+02, 9.04151363e+02, 2.28176362e-01,
9.65550728e+02, 9.16348809e+02, 9.36315168e+02, 9.00445995e+02,
8.87768320e+02, 8.75064126e+02, 8.81480871e+02, 8.78240278e+02,
8.62958271e+02, 8.93813659e+02, 8.83678318e+02, 9.23593998e+02,
9.15524580e+02, 8.77919073e+02, 8.91754242e+02, 9.19274917e+02,
8.62223914e+02, 8.81275387e+02, 8.62331470e+02, 8.69461632e+02,
8.90014577e+02, 9.02656117e+02, 8.74446393e+02, 8.76284046e+02,
8.66751916e+02, 8.54095049e+02, 8.44540741e+02, 8.70263794e+02,
8.66687327e+02, 8.18019291e+02, 8.21875267e+02, 8.13385138e+02,
8.43198211e+02, 8.70558259e+02, 7.94039978e+02, 8.13497634e+02,
8.12217789e+02, 8.01361143e+02, 8.00263045e+02, 7.47101493e+02,
7.35923635e+02, 7.32930255e+02, 7.75930026e+02, 7.83786631e+02,
7.75255742e+02, 7.74938671e+02, 7.04186773e+02, 7.47612911e+02,
7.29315237e+02, 6.94021293e+02, 7.42723487e+02, 7.09890191e+02,
7.60674339e+02, 7.51491228e+02, 7.23875166e+02, 7.41451471e+02,
7.49694410e+02, 7.43337883e+02, 7.00286359e+02, 7.20250078e+02,
7.32189596e+02, 6.93097572e+02, 7.82342462e+02, 7.11995854e+02,
6.84432159e+02, 7.61195087e+02, 7.46725427e+02, 7.44614939e+02,
6.48985204e+02, 6.76023106e+02, 6.89141056e+02, 6.27855922e+02,
7.07298358e+02, 6.52207871e+02, 6.52609278e+02, 6.80525240e+02,
6.89328581e+02, 6.78148423e+02, 7.28229663e+02, 6.91857497e+02,
7.43998987e+02, 6.96885527e+02, 7.33249599e+02, 7.22833678e+02,
7.34832942e+02, 7.19049095e+02, 7.03573908e+02, 7.11151460e+02,
6.89345427e+02, 6.14126253e+02, 4.60412424e+02])
#xdata
time=[datetime.datetime(2015, 11, 7, 18, 14, 24),
datetime.datetime(2015, 11, 7, 18, 19, 12),
datetime.datetime(2015, 11, 7, 18, 23, 9),
datetime.datetime(2015, 11, 7, 18, 26, 38),
datetime.datetime(2015, 11, 7, 18, 29, 55),
datetime.datetime(2015, 11, 7, 18, 32, 52),
datetime.datetime(2015, 11, 7, 18, 35, 36),
datetime.datetime(2015, 11, 7, 18, 38, 26),
datetime.datetime(2015, 11, 7, 18, 41, 13),
datetime.datetime(2015, 11, 7, 18, 44, 16),
datetime.datetime(2015, 11, 7, 18, 47, 12),
datetime.datetime(2015, 11, 7, 18, 50, 1),
datetime.datetime(2015, 11, 7, 18, 53, 2),
datetime.datetime(2015, 11, 7, 18, 56, 17),
datetime.datetime(2015, 11, 7, 18, 59, 45),
datetime.datetime(2015, 11, 7, 19, 3, 14),
datetime.datetime(2015, 11, 7, 19, 6, 28),
datetime.datetime(2015, 11, 7, 19, 10, 4),
datetime.datetime(2015, 11, 7, 19, 13, 46),
datetime.datetime(2015, 11, 7, 19, 17, 47),
datetime.datetime(2015, 11, 7, 19, 21, 35),
datetime.datetime(2015, 11, 7, 19, 25, 15),
datetime.datetime(2015, 11, 7, 19, 29, 22),
datetime.datetime(2015, 11, 7, 19, 33, 41),
datetime.datetime(2015, 11, 7, 19, 38, 38),
datetime.datetime(2015, 11, 7, 19, 43, 16),
datetime.datetime(2015, 11, 7, 19, 47, 53),
datetime.datetime(2015, 11, 7, 19, 53, 21),
datetime.datetime(2015, 11, 7, 19, 59, 4),
datetime.datetime(2015, 11, 7, 20, 5, 14),
datetime.datetime(2015, 11, 7, 20, 11, 6),
datetime.datetime(2015, 11, 7, 20, 17, 7),
datetime.datetime(2015, 11, 7, 20, 24, 11),
datetime.datetime(2015, 11, 7, 20, 31, 5),
datetime.datetime(2015, 11, 7, 20, 38, 1),
datetime.datetime(2015, 11, 7, 20, 44, 39),
datetime.datetime(2015, 11, 7, 20, 50, 8),
datetime.datetime(2015, 11, 7, 20, 54, 31),
datetime.datetime(2015, 11, 7, 20, 59, 28),
datetime.datetime(2015, 11, 7, 21, 4, 54),
datetime.datetime(2015, 11, 7, 21, 10, 24),
datetime.datetime(2015, 11, 7, 21, 15, 56),
datetime.datetime(2015, 11, 7, 21, 21, 50),
datetime.datetime(2015, 11, 7, 21, 27, 38),
datetime.datetime(2015, 11, 7, 21, 33, 24),
datetime.datetime(2015, 11, 7, 21, 37, 54),
datetime.datetime(2015, 11, 7, 21, 42, 24),
datetime.datetime(2015, 11, 7, 21, 47, 20),
datetime.datetime(2015, 11, 7, 21, 52, 12),
datetime.datetime(2015, 11, 7, 21, 57, 3),
datetime.datetime(2015, 11, 7, 22, 1, 41),
datetime.datetime(2015, 11, 7, 22, 6, 21),
datetime.datetime(2015, 11, 7, 22, 11, 30),
datetime.datetime(2015, 11, 7, 22, 16, 44),
datetime.datetime(2015, 11, 7, 22, 21, 59),
datetime.datetime(2015, 11, 7, 22, 26, 56),
datetime.datetime(2015, 11, 7, 22, 32),
datetime.datetime(2015, 11, 7, 22, 37, 43),
datetime.datetime(2015, 11, 7, 22, 43, 21),
datetime.datetime(2015, 11, 7, 22, 48, 45),
datetime.datetime(2015, 11, 7, 22, 53, 49),
datetime.datetime(2015, 11, 7, 22, 58, 49),
datetime.datetime(2015, 11, 7, 23, 4, 4),
datetime.datetime(2015, 11, 7, 23, 9, 8),
datetime.datetime(2015, 11, 7, 23, 14, 3),
datetime.datetime(2015, 11, 7, 23, 18, 34),
datetime.datetime(2015, 11, 7, 23, 22, 58),
datetime.datetime(2015, 11, 7, 23, 27, 43),
datetime.datetime(2015, 11, 7, 23, 32, 22),
datetime.datetime(2015, 11, 7, 23, 36, 48),
datetime.datetime(2015, 11, 7, 23, 41, 9),
datetime.datetime(2015, 11, 7, 23, 45, 29),
datetime.datetime(2015, 11, 7, 23, 49, 59),
datetime.datetime(2015, 11, 7, 23, 54, 34),
datetime.datetime(2015, 11, 7, 23, 59, 6),
datetime.datetime(2015, 11, 8, 0, 3, 37),
datetime.datetime(2015, 11, 8, 0, 8, 17),
datetime.datetime(2015, 11, 8, 0, 13, 15),
datetime.datetime(2015, 11, 8, 0, 18, 22),
datetime.datetime(2015, 11, 8, 0, 23, 23),
datetime.datetime(2015, 11, 8, 0, 28, 28),
datetime.datetime(2015, 11, 8, 0, 33, 59),
datetime.datetime(2015, 11, 8, 0, 39, 51),
datetime.datetime(2015, 11, 8, 0, 45, 56),
datetime.datetime(2015, 11, 8, 0, 51, 57),
datetime.datetime(2015, 11, 8, 0, 57, 48),
datetime.datetime(2015, 11, 8, 1, 4, 2),
datetime.datetime(2015, 11, 8, 1, 10, 47),
datetime.datetime(2015, 11, 8, 1, 17, 43),
datetime.datetime(2015, 11, 8, 1, 24, 22),
datetime.datetime(2015, 11, 8, 1, 30, 39),
datetime.datetime(2015, 11, 8, 1, 37, 2),
datetime.datetime(2015, 11, 8, 1, 43, 51),
datetime.datetime(2015, 11, 8, 1, 50, 38),
datetime.datetime(2015, 11, 8, 1, 57, 23),
datetime.datetime(2015, 11, 8, 2, 4, 3),
datetime.datetime(2015, 11, 8, 2, 10, 46),
datetime.datetime(2015, 11, 8, 2, 18, 6),
datetime.datetime(2015, 11, 8, 2, 25, 14),
datetime.datetime(2015, 11, 8, 2, 32, 30),
datetime.datetime(2015, 11, 8, 2, 39, 35),
datetime.datetime(2015, 11, 8, 2, 46, 49),
datetime.datetime(2015, 11, 8, 2, 54, 43),
datetime.datetime(2015, 11, 8, 3, 2, 33),
datetime.datetime(2015, 11, 8, 3, 10, 15),
datetime.datetime(2015, 11, 8, 3, 17, 28),
datetime.datetime(2015, 11, 8, 3, 24, 30),
datetime.datetime(2015, 11, 8, 3, 32, 8),
datetime.datetime(2015, 11, 8, 3, 39, 13),
datetime.datetime(2015, 11, 8, 3, 46, 10),
datetime.datetime(2015, 11, 8, 3, 52, 48),
datetime.datetime(2015, 11, 8, 3, 59, 1),
datetime.datetime(2015, 11, 8, 4, 5, 39),
datetime.datetime(2015, 11, 8, 4, 11, 59),
datetime.datetime(2015, 11, 8, 4, 18, 27),
datetime.datetime(2015, 11, 8, 4, 24, 49),
datetime.datetime(2015, 11, 8, 4, 31, 7),
datetime.datetime(2015, 11, 8, 4, 39, 18),
datetime.datetime(2015, 11, 8, 4, 46, 26),
datetime.datetime(2015, 11, 8, 4, 53, 13),
datetime.datetime(2015, 11, 8, 5, 0, 11),
datetime.datetime(2015, 11, 8, 5, 8, 57),
datetime.datetime(2015, 11, 8, 5, 15, 45),
datetime.datetime(2015, 11, 8, 5, 22, 6),
datetime.datetime(2015, 11, 8, 5, 28, 5),
datetime.datetime(2015, 11, 8, 5, 34, 57),
datetime.datetime(2015, 11, 8, 5, 40, 4),
datetime.datetime(2015, 11, 8, 5, 44, 45),
datetime.datetime(2015, 11, 8, 5, 49, 8),
datetime.datetime(2015, 11, 8, 5, 54, 41),
datetime.datetime(2015, 11, 8, 5, 58, 46),
datetime.datetime(2015, 11, 8, 6, 2, 35),
datetime.datetime(2015, 11, 8, 6, 6, 18),
datetime.datetime(2015, 11, 8, 6, 11, 11),
datetime.datetime(2015, 11, 8, 6, 14, 45)]
#ploting data
#plt.plot(time, Temperature)
#plt.show()
#curve_fit
def fun(x, A, B) :
return A*np.exp(-1*B*x**2)
parameters, covariance = curve_fit(fun, time, Temperature)
plt.plot(time, fun(time, *parameters))
plt.show()
这是执行结果吧:
Traceback (most recent call last): File "datetime_fit.py", line 187, in parameters, covariance = curve_fit(fun, time, Temperature) File "/home/lhoussine/anaconda3/lib/python3.8/site-packages/scipy/optimize/minpack.py", line 742, in curve_fit xdata = np.asarray_chkfinite(xdata, float) File "/home/lhoussine/anaconda3/lib/python3.8/site-packages/numpy/lib/function_base.py", line 486, in asarray_chkfinite a = asarray(a, dtype=dtype, order=order) TypeError: float() argument must be a string or a number, not 'datetime.datetime'
您需要使用日期和时间的数字表示,例如可以从日期时间对象的 timestamp 方法获取的 Unix 时间。例如:
def fun(x, A, B) :
return A*x + B # a simple linear fit for illustration
ts = np.array([t.timestamp() for t in time])
parameters, covariance = curve_fit(fun, ts, Temperature)
plt.plot(time, Temperature)
plt.plot(time, fun(ts, *parameters))
plt.show()