2016-11-18 102 views
0

說我有10個的4×4陣列numpy的:一個命令中有多個最小二乘線性迴歸?

[[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... 

我想要做的就是計算最小二乘線性迴歸矩陣中的每個條目。

所以我想採取m0[0][0], m1[0][0], m2[0][0], etc...和計算線性迴歸。然後對[0][1]值做同樣的操作。

有沒有辦法做到這一點,而不必首先提取所有[0][0]值到一個新的數組,並呼籲numpy.linalg.lstsq?我可以以某種方式將我的10 * 4 * 4陣列傳遞給numpy.linalg.lstsq,以便計算多個迴歸?

+0

您是否試圖執行16(4 * 4)個單獨的迴歸?如果是這樣,你爲每個迴歸獨立(x)變量使用了什麼? – Leo

+0

@Leo,是16個獨立的迴歸。每個變量的x都只是'xrange(0..10)' – FGreg

+0

好吧,我不確定直接傳遞它,但是提取所有16個數組並不太難,像arr.swapaxes(0,2).reshape (16,3)。這假定從3 4 * 4數組開始。在你的情況下,你會使用10。 – Leo

回答

0

給這個鏡頭......我相信有一種方法可以讓這個效率更高。

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)