이 포스팅은 좀 X 데이터와 일부 Y 데이터가커브 피팅 최적화 scipy 파이썬 NumPy와
에서, Y 데이터는 X 데이터의 가중 합으로 적합 할 수 있습니다 내 앞의 질문을 바탕으로, 내 문제는이다 가장 잘 맞는 계수를 찾으십시오.
나는 그것이 최선의 방법이나 최적의 방법이 아닐 수도 있다는 것을 알았지 만, 이제는 그것을하는 한 방법을 이해합니다.
그러나 X- 데이터는 때로는 이동 될 수 있으므로 X의 각 열을 N 증분 단위로 이동하거나 슬라이딩 한 후에 만 가장 적합한 것을 얻을 수 있습니다.
np.roll이이 작업을 수행하는 데 사용할 수 있는지 알아보기 위해 노력했지만 현재 함수에 열과 행을 올리거나 내릴 수있는 np.roll의 coefficents 및 정수 값이 모두 필요하므로 붙어 있습니다. N을 착용감 향상.
필자는 커브 핏에이 두 가지 종류의 매개 변수를 어떻게 전달할 수 있는지 이해하지 못한다고 생각합니다. 가능합니까?
아마도이 작업을 수행하는 가장 좋은 방법은 np.roll이 아닙니까? 그래서 다른 방법에 대한 어떤 제안도 감사 할 것입니다.
아래 예제에서 두 번째 열을 -1 씩 이동하면 Ydata에 더 잘 맞는 Xdata가 생성됩니다.
xdata = np.array([[1.0, 1.0],[1.0, 1.0], [2.0, 3.0], [4.0, 2.0], [2.0, 1.0],[1.0, 1.0]])
ydata = np.array([3.0, 5.0, 6.0, 9.0, 5.0, 3.0])
def fitfunc(xdata, *params):
ctx = 0.0
# y is not yet defined by somehow I would like it to take the values passed in the second np.array defined in c below
# the for loop should just run twice in this example
for n in range(len(params)):
ctx = params[n]*np.roll(xdata[:,n], y, axis=0) + ctx
return ctx, y
#initial guesses for fitting parameters
c = (np.array([0.6, 0.3]), np.array([1, 1])) # the second np.array is what I would like to pass a y's
# fit data using SciPy's Levenberg-Marquart method
nlfit, nlpcov = scipy.optimize.curve_fit(fitfunc, xdata, ydata, p0=(c), sigma=None)
print (nlfit)
는
y = mx + b 형식의 선형 모델을 사용하려고하며 라인을 위아래로 이동시키는 상수 용어 b를 포함 하시겠습니까?아니면 데이터가 일련의 시간 계열인데 x 변수를 사용하는 데 걸리는 시간이 어떨지 확실하지 않습니다 (np.roll에 암시되어있을 수도 있음)? – David
내 데이터는 스펙트럼입니다. 그래서 Xdata 배열은 열에 배열 된 두 스펙트럼의 행렬 일 수 있습니다. 이 주제에 대한 나의 이전 질문에서 나는 Xdata가 나의 ydata를 X * a + X * b ... 등으로 기술 할 수 있다고 믿는다. 적합성을 최적화하려고 할 때 x 데이터 열을 위아래로 이동하려는 이유는 실험적 오류가 그러한 변화가 실제 데이터에서 일반적이라는 것을 의미하기 때문에 계수로 각 Xdata 열을 곱하는 것은 물론, 잘하면 Xdata 열을 서로 맞춰 시범 변속하여 최상의 적합성을 찾는 방법이 있습니다. – steve
나는 내가 성취하고자하는 바를 명확히하기를 희망한다. np.roll은 내가이 칼럼을 서로 상대적으로 옮길 수있을 것이라고 생각한 한 가지 방법 일뿐입니다. 관련된 스펙트럼에는 수천 개의 포인트가 있기 때문에 더 나은 적합성을 얻기 위해 한쪽 끝에서 다른 쪽으로 또는 그 반대로 롤을 돌리면이를 달성하는 방법이 될 수 있다고 생각했습니다. – steve