2014-11-25 34 views
6

Ben Python kullanılarak en küçük kareler AX = B çözmek için nasıl biliyorum:Python'da ağırlık matrisi ile en küçük kareler nasıl kullanılır?

Örnek:

A=[[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,0,0]] 
B=[1,1,1,1,1] 
X=numpy.linalg.lstsq(A, B) 
print X[0] 
# [ 5.00000000e-01 5.00000000e-01 -1.66533454e-16 -1.11022302e-16] 

Ama ne bir ağırlık matrisi Kimlik olmamak ile bu aynı denklemi çözme konusunda:

A.X = B (W) 

Örnek:

A=[[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,0,0]] 
B=[1,1,1,1,1] 
W=[1,2,3,4,5] 

Adva tarafından teşekkürler nce,

+1

Bu bağlantıya baktınız: http://stackoverflow.com/questions/19624997/understanding-scipys-least-square-function-with-irls – xnx

+0

Evet; Denedim: B = numpy.dot (B, W) çözmeden önce, ama bir mesajım var: numpy.linalg.linalg.LinAlgError: verilen 0 boyutlu dizi. Dizi iki boyutlu –

+2

olmalıdır. İki boyutlu dizilerin nokta çarpımını alırsanız skaler elde edersiniz. Belki de B unsurlarını basitçe W ile çarpmak mı istiyorsunuz? Burada Python listesi yerine numpy dizileri kullanmak daha iyidir. – xnx

cevap

4
başka (bir diyagonal matris olarak W kullanma ve matrisyal ürünler) yaklaşımını bulundu

:

A=[[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,0,0]] 
B = [1,1,1,1,1] 
W = [1,2,3,4,5] 
W = np.sqrt(np.diag(W)) 
Aw = np.dot(W,A) 
Bw = np.dot(B,W) 
X = np.linalg.lstsq(Aw, Bw) 

Aynı değerler ve aynı sonuçlar.

+1

matris ürünü, @ xnx'in önerisi olan – DomTomCat

+1

'un eleman bileli ürününden daha pahalıdır, daha hesaplanabilir bir şekilde daha pahalı olabilir ama bu, okunması daha nettir. Doğrusal cebir ile kod netliği için +1 –

5

ben size ağırlıkları tanımladığınız bilmiyorum ama deneyebilirsin bu uygunsa:

import numpy as np 
A=np.array([[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,0,0]]) 
B = np.array([1,1,1,1,1]) 
W = np.array([1,2,3,4,5]) 
Aw = A * np.sqrt(W[:,np.newaxis]) 
Bw = B * np.sqrt(W) 
X = np.linalg.lstsq(Aw, Bw) 
+1

Teşekkürler. Ben iyi bilmiyorum ve W [:, np.newaxis] (veya W [:, Yok]) köşegen bir matris verdiğini fark etmek zorundayım. Yani dizi ([[1], [2], [3], [4], [5]]), diyagonalde bu değerlere sahip 5x5 diyagonal bir matris anlamına gelir. –

+1

(Bu? Aw sonucu bir 5x4 dizisi olduğundan, bu tek açıklama) –

+1

Üzgünüm, * operatörü tarafından karıştırıldım (diziler için kullanılmamıştım). Bu bir matris ürünü değil, terimdir. –