Matrizenmultiplikation mit rationalen/Dezimalzahlen

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
enna
User
Beiträge: 10
Registriert: Freitag 24. August 2007, 09:11

Dienstag 28. August 2007, 16:13

Hallo!
Ich habe eine Frage zu folgendem Code:

Code: Alles auswählen

>>> from numpy import matrix
>>> A=matrix([[1,0,0],[0,1,0],[0,0,1]])
>>> x=matrix([[2/3],[3/2],[1]])
>>> A*x
matrix([[0],
       [1],
       [1]])
Das Ergebnis der Matrizenmultiplikation ist ja offensichtlich falsch; es sieht so aus, als wuerde Python mit integern rechnen. Wie kann ich erreichen, dass Python die Matrizen als floating point numbers multipliziert und ausgibt?

Eigentlich braeuchte ich das Ergebnis sogar als Vektor von Bruechen, also nicht floating point numbers. Geht das irgendwie?

Herzlichen Dank!
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Dienstag 28. August 2007, 16:36

Hoi,

in (nicht allzu ferner) Zukunft mag Dein Code auch so funktionieren, jetzt aber solltest Du vielleicht noch

Code: Alles auswählen

from __future__ import division
voranstellen. Das bewirkt, daß 2/3 gleich 0.666666... ist.

Gruß,
Christian
enna
User
Beiträge: 10
Registriert: Freitag 24. August 2007, 09:11

Dienstag 28. August 2007, 16:39

Vielen Dank, das funktioniert schon mal, allerdings liefert es

Code: Alles auswählen

>>> from __future__ import division
>>> from numpy import matrix
>>> A=matrix([[1,0,0],[0,1,0],[0,0,1]])
>>> x=matrix([[2/3],[3/2],[1]])
>>> A*x
matrix([[ 0.66666667],
       [ 1.5       ],
       [ 1.        ]])
Wie kann ich es schaffen, dass das Ergebnis statt dessen

Code: Alles auswählen

matrix([[2/3],[3/2],[1]])
ist?
BlackJack

Dienstag 28. August 2007, 16:54

Im `gmpy`-Modul gibt's rationale Zahlen:

Code: Alles auswählen

In [11]: import gmpy

In [12]: import numpy

In [13]: A = numpy.matrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]])

In [14]: x = numpy.matrix([[gmpy.mpq(2, 3)], [gmpy.mpq(3, 2)], [1]])

In [15]: A * x
Out[15]:
matrix([[2/3],
        [3/2],
        [1]], dtype=object)
Da `numpy` diese Zahlen nicht kennt, rechnet die Bibliothek dann aber mit ganz normalen Objekten, d.h. der Geschwindigkeitsgewinn von `numpy` ist nicht mehr gegeben.
Antworten