Numpy, frage zu "numpy.linalg" "solve"

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
paracide
User
Beiträge: 11
Registriert: Dienstag 9. August 2011, 20:55

Hi zusammen,

ich habe seit 2 Wochen ein Problem, ich versuche eine beliebige Matrix gleichzusetzen.
Meine Versuche sind bisher leider nicht vom Erfolg gekrönt...

Zu den Details,

Ich erstelle mir folgendes Array
[[1 1 1]
[1 1 2]
[1 2 1]
[1 2 2]]

über den Code:

Code: Alles auswählen

s = [[1, b, c] for b in range(1,3) for c in range(1,3)]
Matrix = numpy.array(s)
nun Versuche ich die Matrix mit [1,0,0,0] gleichzusetzen.

Code: Alles auswählen

import numpy
from numpy.linalg import solve

s = [[1, b, c] for b in range(1,3) for c in range(1,3)]
Matrix = numpy.array(s)


b = numpy.array([1,0,0,0])
x = solve(Matrix,b)

print (x)
Dies funktioniert leider nicht, ich erhalte folgende Fehlermeldung:

Traceback (most recent call last):
File "G:\gleichung_lösen2.py", line 9, in <module>
x = solve(Matrix,b)
File "C:\Python26\Lib\site-packages\numpy\linalg\linalg.py", line 312, in solve
_assertSquareness(a)
File "C:\Python26\Lib\site-packages\numpy\linalg\linalg.py", line 160, in _assertSquareness
raise LinAlgError, 'Array must be square'
LinAlgError: Array must be square


Aus der Fehlermeldunge interpretiere ich, das der solve Befehl mit einem Array nicht funktioniert und ich ein square benötige.
Also, Array in Square geändert...

Code: Alles auswählen

import numpy
from numpy.linalg import solve

s = [[1, b, c] for b in range(1,3) for c in range(1,3)]
Matrix = numpy.square(s)


b = numpy.square([1,0,0,0])
x = solve(Matrix,b)

print (x)
Und die Fehlermeldung ist die selbe.
Dazu kommt noch das meine Matrix nicht mehr wie gewollt aussieht, sondern sich auch noch verändert hat.


Kann mir einer eventuell einen Tipp geben?
deets

Meine lineare algebra ist schon sehr verrostet, aber die Fehlermeldung besagt doch, dass die Gestalt deiner Matrix ein Quadrat sein muss - nicht den Typ quadrat haben. Und wenn mich nicht alles taeuscht, dann waere ja auch eine Matrix wie die deine ueberbestimmt - eine Zeile waere immer eine Linearkombination der n-1 anderen.

Wohingegen eine Matrix mit weniger Zeilen statt Spalten auch wieder problematisch ist, weil dann immer mehr als eine Loesung bei rum kommen kann.

Wie gesagt - ich bin mir da sehr, sehr unsicher. Aber die Fehlermeldung besagt das, und "numpy.square" ist auch keine Funktion zum erzeugen von Matrizen anderen Typs, sondern eine Funktion, welche die Elemente einer Matrix quadriert.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Warum machst du jetzt extra einen neuen Thread auf und stellst dieselbe Frage nochmal? :evil: :evil: :evil: :evil: Das solve mit deiner Matrix nicht funktionieren wird habe ich dir in dem alten Thread und per PM schon x-Mal gesagt. Und du versuchst es trotzdem wieder mit solve. Ich fass es nicht. :K Warum fragst du überhaupt wenn du es hinterher sowieso wieder so machst wie du denkst, da brauchst du nicht fragen. :K

[/flame]

Und nun zum Problem:

:idea: SOLVE GEHT NICHT!!!! GLAUB ES ENDLICH! :idea:
  1. Lies bitte die Fehlermeldungen genau und versuch sie nicht zu interpretieren. Da steht nicht "Array must be a square" sondern nur "Array must be square". Die Matrix muss also quadratisch ein und nicht "ein square". Das du Fehlermeldungen nicht richtig liest hat dir schon vorher mehrfach Probleme bereitet.
  2. Lies bitte die Dokumentation zu den Funktionen die du verwendest. Dann wäre dir nämlich 1. von selbst klar geworden was square macht und 2. warum solve nicht funktioniert.
Lösungsvorschläge: Siehe alter Thread und PM.

PS: Verzeihe mir den Ton, aber ich krieg grad nen Rappel.
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

@paracide: Welche Lösung erwartest du denn in dem gezeigten Beispiel?
paracide
User
Beiträge: 11
Registriert: Dienstag 9. August 2011, 20:55

Darii hat geschrieben:Warum machst du jetzt extra einen neuen Thread auf und stellst dieselbe Frage nochmal? :evil: :evil: :evil: :evil: Das solve mit deiner Matrix nicht funktionieren wird habe ich dir in dem alten Thread und per PM schon x-Mal gesagt. Und du versuchst es trotzdem wieder mit solve. Ich fass es nicht. :K Warum fragst du überhaupt wenn du es hinterher sowieso wieder so machst wie du denkst, da brauchst du nicht fragen. :K

[/flame]

Und nun zum Problem:

:idea: SOLVE GEHT NICHT!!!! GLAUB ES ENDLICH! :idea:
  1. Lies bitte die Fehlermeldungen genau und versuch sie nicht zu interpretieren. Da steht nicht "Array must be a square" sondern nur "Array must be square". Die Matrix muss also quadratisch ein und nicht "ein square". Das du Fehlermeldungen nicht richtig liest hat dir schon vorher mehrfach Probleme bereitet.
  2. Lies bitte die Dokumentation zu den Funktionen die du verwendest. Dann wäre dir nämlich 1. von selbst klar geworden was square macht und 2. warum solve nicht funktioniert.
Lösungsvorschläge: Siehe alter Thread und PM.

PS: Verzeihe mir den Ton, aber ich krieg grad nen Rappel.
Ok, ich gebe dir recht. Ich hätte es in den alten Beitrag schreiben sollen.
Dies ist nicht zu entschuldigen.

Im laten Beitrag wurde mir geraten den Befehl solve zu verwenden.

Dies habe ich versucht, jedoch wieder mit Fehlermeldung. Da ich der Meinung war das es kein lineares Gleichungssystem war habe cih die Fehlermeldung falsch interpretiert.
Auch wieder mein Fehler, da hattest du recht.

Dies bezüglich hast du mir geraten nicht nur zu Posten das ich eine Fehlermeldung bekomme, sondern auch die Fehlermeldung zu posten...

Dein letzter Hinweis war das ich wohl eher sympy.solve_linear_system benötige.
Leider finde ich den Befehl nicht im Python Praxisbuch und im internet find ich zwar den Code. Jedoch keine Beschreibung...

Sprich, ich stehe immernoch auf der selben stelle und bewege mich keinen schritt weiter...
Auf welcher Homepage, oder in welchem Buch finde ich den Befehl den ich benötige?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

paracide hat geschrieben: Dein letzter Hinweis war das ich wohl eher sympy.solve_linear_system benötige.
Leider finde ich den Befehl nicht im Python Praxisbuch und im internet find ich zwar den Code. Jedoch keine Beschreibung...
Was bedeutet denn, dass Du keine Beschreibung findest? Hast Du denn mal in der Doku dazu nachgeguckt? Gibt es dazu keine Doku?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Hyperion hat geschrieben:Gibt es dazu keine Doku?
Im Docstring "dir(sympy.solve_linear_system)" gibt es eine lange Beschreibung plus Beispiel. Das sollte eigentlich auch in der Dokumentation stehen (war jetzt zu faul um nachzuschauen).
paracide
User
Beiträge: 11
Registriert: Dienstag 9. August 2011, 20:55

Ich habe im Python Praxisbuch nach dem Befehl gesucht.

Und unter http://docs.python.org/genindex-S.html
sowie auf wiki.python.de
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ähem... erste Anlaufstelle sollte doch die Seite des Projektes sein!?! Du hast das ganze ja auch einmal installiert - spätestens da sollte Dir bewusst geworden sein, dass es sich um kein Modul aus der Standardlib handelt und demzufolge dort auch sicherlich nicht dokumentiert ist, oder?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
paracide
User
Beiträge: 11
Registriert: Dienstag 9. August 2011, 20:55

Hyperion hat geschrieben:Ähem... erste Anlaufstelle sollte doch die Seite des Projektes sein!?! Du hast das ganze ja auch einmal installiert - spätestens da sollte Dir bewusst geworden sein, dass es sich um kein Modul aus der Standardlib handelt und demzufolge dort auch sicherlich nicht dokumentiert ist, oder?

Da habe ich natürlich auch geguckt...
http://docs.sympy.org/0.7.1/index.html
auf der Homepage habe ich direkt nach solve gesucht

Irgendwie bin ich wohl echt zu doof die scheiß doku zu finden...
Bzw. den Befehl "sympy.solve_linear_system" finde ich nicht
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

paracide hat geschrieben: Da habe ich natürlich auch geguckt...
http://docs.sympy.org/0.7.1/index.html
auf der Homepage habe ich direkt nach solve gesucht
Aber nicht geschrieben ;-)

Wobei ich Dir zustimmen muss: Ich finde die Funktion auch nicht in der Doku.

Aber gkuhl hat Recht; ruf doch einfach mal die Hilfe in einer Konsole auf: `help(sympy.solve_linear_system)`
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Also, zu finden ist es schon, aber nur in den API-Docs.
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Hyperion hat geschrieben:help(sympy.solve_linear_system)
Ich bin zu sehr an IPython gewöhnt, meinte natürlich `help` und nicht `dir`.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

paracide hat geschrieben:Dein letzter Hinweis war das ich wohl eher sympy.solve_linear_system benötige.
Leider finde ich den Befehl nicht im Python Praxisbuch und im internet find ich zwar den Code. Jedoch keine Beschreibung...

Sprich, ich stehe immernoch auf der selben stelle und bewege mich keinen schritt weiter...
Auf welcher Homepage, oder in welchem Buch finde ich den Befehl den ich benötige?
Es ist leider eine Tatsache, dass es außer google keiner hinbekommt eine gescheite Suchfunktion zu machen. Wenn du etwas nicht auf anhieb findest nimm google. Allerdings ist die doku dazu tatsächlich fast unauffindbar, aber ich könnte schwören, dass die noch da war als ich sie dir Vorschlug.
Antworten