Widziałem to pytanie lub wariant zapytany gdzie indziej, np.Błąd Scipy fmin_slsqp "nie udało się przekonwertować ósmego argumentu` g 'z _slsqp.slsqp na tablicę C/Fortran "
Scipy error using optimization module. Failure converting array to fortran
http://numpy-discussion.10968.n7.nabble.com/minimize-Algorithmen-Problem-with-boundarys-td37709.html
Ale nie są one naprawdę umieścić w prosty hackable przykład kodu. Nie ma też prawdziwych odpowiedzi (prawdopodobnie z powodu braku prostej wersji demo problemu).
Problem jest, kiedy próbuje dopasować funkcję stosując metodę scipy.optimise fmin_slsqp masz ten dość mętną błąd
„nie powiodło się w przekształcaniu 8th argumentem` g”o _slsqp.slsqp do C/Fortran tablicy”
W poniższym kodzie dopasowuję funkcję liniową do losowo skorelowanych danych przy użyciu metody minimumsq. Z pliku .docs nie widzę powodu, dla którego ta sama składnia nie powinna robić tego samego przy użyciu fmin_slsqp, ale tak się nie dzieje.
Czy ktoś wie dlaczego?
import numpy as nm
from scipy.optimize import leastsq, fmin_slsqp
import matplotlib.pyplot as plt
# residuals of linear function
def res(params,x,y_real):
y_fit = params[0] +x*params[1]
res = y_fit-y_real
return res
#generate correlated data
xx = nm.array([-0.51, 51.2])
yy = nm.array([0.33, 51.6])
means = [xx.mean(), yy.mean()]
stds = [xx.std()/3, yy.std()/3]
corr = 0.8 # correlation
covs = [[stds[0]**2 , stds[0]*stds[1]*corr],
[stds[0]*stds[1]*corr, stds[1]**2]]
m = nm.random.multivariate_normal(means, covs, 100)
x = m[:,0]
y = m[:,1]
# Initial values of parameters
initvals = [0,0]
fit1,j = leastsq(res, initvals, args=(x,y))
#Plot fit 1
y_fit = fit1[0] + fit1[1]*x
plt.scatter(x,y)
plt.plot(x,y_fit)
plt.show()
fit2 = fmin_slsqp(res, initvals, args=(x,y))
Prawdopodobnie błąd? Otrzymuję komunikat o błędzie. – Moritz