2016-04-20 10 views
0

Zuerst meinen Code:"Inkompatible Dimensionen" mit lstsq mit Python numpy

import numpy as np 

def square(list): 
    return [i ** 2 for i in list] 

def multLists(x, y): 
    return x * y 

def main(): 
    x = np.array([1.02, 0.95, 0.87, 0.77, 0.67, 0.55, 0.44, 0.30, 0.16, 0.01]) 
    y = np.array([0.39, 0.32, 0.27, 0.22, 0.18, 0.15, 0.13, 0.12, 0.13, 0.15]) 

    a = square(y) 
    b = multLists(x,y) 
    c = x 
    d = y 
    e = np.ones(len(x)) 
    x2 = square(x) 

    Matrix = np.matrix([a,b,c,d,e]) 

    Output = np.linalg.lstsq(Matrix,x2)[0] 
    print Output 


main() 

Und meinen Fehlercode:

Traceback (most recent call last): 
File "problem6.py", line 26, in <module> 
main() 
File "problem6.py", line 22, in main 
Output = np.linalg.lstsq(Matrix,x2)[0] 
File "/usr/lib/python2.7/dist-packages/numpy/linalg/linalg.py", line 1828, in lstsq 
raise LinAlgError('Incompatible dimensions') 
numpy.linalg.linalg.LinAlgError: Incompatible dimensions 

Im Wesentlichen, ich versuche Ax = b zu lösen, mit A gleich "Matrix" und b = "x2". Ich versuche dann, die kleinsten Quadrate für X zu verwenden, aber es funktioniert nicht. Wenn ich jedoch Matrix gleich ändern:

Matrix = [[0 for x in range(5)] for x in range(10)] 

Der Code dann kompiliert und läuft richtig (obwohl offensichtlich mit falschen Werten, da Matrix nicht gleich soll^dass Irgendwelche Gedanken Dank

Antwort

2
.?.

Sie benötigen eine Matrix transponieren.

Output = np.linalg.lstsq(Matrix.T, x2)[0] 

Ihr gebrochener Code eine Matrix mit fünf Reihen von 10 Elementen erzeugt Ihre Arbeits Code eine Matrix mit 10 Reihen von 5 Elementen erzeugt

.

Sie sollten wahrscheinlich np.array auch statt np.matrix, verwenden und eine np.array anstatt eine Liste von square

+0

Das funktionierte wieder! Vielen Dank! Ich habe versucht, es anders zu machen, aber ich habe 10 Elemente gefunden, als ich 5 brauchte. Danke für die Hilfe! – user2751556