2016-11-18 3 views
0

Say I 10 4 * 4 numpy Arrays:Mehrere lineare lineare Regressionen in einem Befehl?

[[1, 1, 1, 1], 
[2, 2, 2, 2], 
[3, 3, 3, 3], 
[4, 4, 4, 4]] 

[[2, 2, 2, 2], 
[3, 3, 3, 3], 
[4, 4, 4, 4], 
[5, 5, 5, 5]] 

etc... 

was ich will ist der kleinsten Quadrate für jeden Eintrag in der Matrix der linearen Regression tun zu berechnen.

Also ich möchte m0[0][0], m1[0][0], m2[0][0], etc... nehmen und die lineare Regression berechnen. Dann machen Sie das gleiche für die [0][1] Werte.

Gibt es eine Möglichkeit dies zu tun, ohne zuerst alle [0][0] Werte in ein neues Array zu extrahieren und numpy.linalg.lstsq aufzurufen? Kann ich mein 10 * 4 * 4-Array irgendwie an numpy.linalg.lstsq übergeben, so dass es mehrere Regressionen berechnet?

+0

Versuchen Sie 16 (4 * 4) separate Regressionen durchzuführen? Wenn ja, was verwenden Sie für die unabhängige (x) Variable für jede Regression? – Leo

+0

@Leo, ja 16 separate Regressionen. Die x-Variable für jedes wird einfach 'xrange (0..10)' sein. – FGreg

+0

Ok, ich bin mir nicht sicher, ob ich es direkt übergeben kann, aber das Extrahieren aller 16 Arrays ist nicht so schwierig mit arr.swapaxes (0, 2) .reshape (16, 3). Dies setzt voraus, dass mit 3 4 * 4 Arrays begonnen wird. In Ihrem Fall würden Sie 10 verwenden. – Leo

Antwort

0

Geben Sie dies eine Chance ... Ich bin sicher, es gibt eine Möglichkeit, dies effizienter zu machen.

def my_lin_reg(arr0): 

    n = arr0.shape[0] 
    s = arr0.shape[1] * arr0.shape[2] 

    arr1 = arr0.swapaxes(0, 2).reshape(s, n) 

    x = np.vstack([range(n), np.ones(n)]).T 

    mc = [] 

    for sub_arr in arr1: 

     mc.append(np.linalg.lstsq(x, sub_arr)[0]) 

    return np.array(mc)