2012-04-13 21 views
0

私は、同じ数のポイントを持つ多数の異なるデータセットに合わせたい単一の関数を持っています。たとえば、画像のすべての行に多項式を当てはめることができます。 scipyや他のパッケージでこれを行う効率的でベクトル化された方法がありますか?あるいは、私は単一のループに頼らざるを得ませんか(または少し速くするためにマルチプロセッシングを使用しますか)?PythonでN個のデータセットに同時にフィッティング

答えて

0

あなたはnumpy.linalg.lstsq使用することができます。

import numpy as np 

# independent variable 
x = np.arange(100) 

# some sample outputs with random noise 
y1 = 3*x**2 + 2*x + 4 + np.random.randn(100) 
y2 = x**2 - 4*x + 10 + np.random.randn(100) 

# coefficient matrix, where each column corresponds to a term in your function 
# this one is simple quadratic polynomial: 1, x, x**2 
a = np.vstack((np.ones(100), x, x**2)).T 

# result matrix, where each column is one set of outputs 
b = np.vstack((y1, y2)).T 

solutions, residuals, rank, s = np.linalg.lstsq(a, b) 

# each column in solutions is the coefficients of terms 
# for the corresponding output 
for i, solution in enumerate(zip(*solutions),1): 
    print "y%d = %.1f + (%.1f)x + (%.1f)x^2" % ((i,) + solution) 


# outputs: 
# y1 = 4.4 + (2.0)x + (3.0)x^2 
# y2 = 9.8 + (-4.0)x + (1.0)x^2 
+0

感謝を!このメソッドは多項式に対してのみ機能するのですか、それとも任意の関数で使用することは可能ですか? – astrofrog

+0

@astrofrog:任意の機能を置くことができます。例えば'a = np.vstack((np.exp(x)、x))T'は' A * e^x + B * x'に合うようにしようとします。それに応じて列を構成してください。 – Avaris

関連する問題