가장 쉬운 해결책은 실제로 원래 목록의 필터링 된 버전 인 새 목록을 만드는 것입니다. 물론 파이썬리스트 대신 numpy 배열로 작업하는 것이 가장 좋습니다.
그래서 x는 함수
f
에 몇 개의
a
보다 큰 경우 만 해당 값에 맞게하고자하는 두 개의 배열
x
및
y
을 가지고 가정합니다. 당신은
x2 = x[x>a]
y2 = y[x>a]
popt2, _ = scipy.optimize.curve_fit(f, x2, y2)
으로 완벽한 예를 필터링하고 curve_fit
수 있습니다
import numpy as np; np.random.seed(0)
import matplotlib.pyplot as plt
import scipy.optimize
x = np.linspace(-1,3)
y = x**2 + np.random.normal(size=len(x))
f = lambda x, a,b : a* x +b
popt, _ = scipy.optimize.curve_fit(f, x,y, p0=(1,0))
x2 = x[x>0.7]
y2 = y[x>0.7]
popt2, _ = scipy.optimize.curve_fit(f, x2,y2, p0=(1,0))
plt.plot(x,y, marker="o", ls="", ms=4, label="all data")
plt.plot(x, f(x, *popt), color="moccasin", label="fit all data")
plt.plot(x2, f(x2, *popt2), label="fit filtered data")
plt.legend()
plt.show()
마지막으로 그냥 언급, 당신은 또한
x[(x>0.7) & (x<2.5)]
같은 논리 연산자를 사용하여 여러 조건을 연결할 수 있습니다.