Seite 1 von 1

numpy.matrix umwandeln

Verfasst: Donnerstag 3. Juni 2010, 11:04
von bwbg
Hallo liebe Leute,

ich stehe gerade etwas auf dem Schlauch. Zur Zeit rechne ich mit Punktdaten (x, y). Zu diesem Zweck habe ich mir numpy ausgeguckt. Zum Verschieben, Rotieren, Skalieren habe ich mir bereits einen Satz Funktionen [¹] zusammen gezimmert.

Code: Alles auswählen

>>> import math2d
>>> p = math2d.point(10., -5.)
>>> t = math2d.translate(2., 4.)
>>> r = math2d.rotate(-.23)
>>> transform = r * t
>>> transform * p
matrix([[ 9.73666395],
        [-4.86833198],
        [ 1.        ]])
>>> (transform * p)[:2]
matrix([[ 9.73666395],
        [-4.86833198]])
Ich stehe nun vor dem Problem, dass ich im Verlauf meines Programmes die Ergebnisse wieder als 2-Element iterable benötige (x, y).

Gibt die Standard-Bibliothek oder numpy einen eleganten Lösungsansatz her?

Vielen Dank im Voraus.

Grüße ...
Heiko
----
[¹]: http://paste.pocoo.org/show/221331/

Re: numpy.matrix umwandeln

Verfasst: Donnerstag 3. Juni 2010, 11:51
von ms4py
Ist das die Antwort auf deine Frage?

Code: Alles auswählen

>>> a = numpy.matrix([[ 9.73666395],
...         [-4.86833198],
...         [ 1.        ]])
>>> x,y = a[:2]
>>> x
matrix([[ 9.73666395]])
>>> y
matrix([[-4.86833198]])
>>>
Wenn nicht, ist mir deine Fragestellung nicht ganz klar ;)

P.S. Wenn du lieber floats als Ergebnis haben willst:

Code: Alles auswählen

>>> x,y = map(float, a[:2])
>>> x
9.7366639500000005
>>> y
-4.8683319799999998

Edit: IMO ist deine Translations-Matrix falsch, Indexzugriff müsste mit [2,:2] erfolgen (nicht [:2,2]). Und an der Stelle sind die Klammern bei x und y außerdem unnötig, finde ich ohne deutlich übersichtlicher.

Re: numpy.matrix umwandeln

Verfasst: Donnerstag 3. Juni 2010, 12:02
von gkuhl
Wenn du nur einen Iterator brauchst, reicht auch 'flat':

Code: Alles auswählen

In [30]: v
Out[30]: 
matrix([[ 10.],
        [ -5.],
        [  1.]])

In [31]: v.flat
Out[31]: <numpy.flatiter object at 0x91afb70>

In [32]: for x in v.flat:
   ....:     print x
   ....:     
   ....:     
10.0
-5.0
1.0
Grüße
Gerrit

Re: numpy.matrix umwandeln

Verfasst: Donnerstag 3. Juni 2010, 18:55
von ms4py
Oder `imap`

Code: Alles auswählen

>>> from itertools import imap
>>> for i in imap(float, v):
...     print i
...
10.0
-5.0
1.0
SCNR :)