2009-04-24 6 views
4

Ich habe schnell numPy überprüft, aber es sieht so aus, als ob man Arrays als Vektoren benutzt? Ich suche nach einem richtigen Vector3-Typ, den ich instanziieren und bearbeiten kann.Gibt es in Python einen Vector3-Typ?

+0

Was möchten Sie tun, dass NumPy-Arrays nicht unterstützen? –

+0

Ich möchte einen dedizierten Typ mit Instanzmethoden. –

+0

Beachten Sie, dass die Verwendung eines separaten Objekts für jeden Vektor potenziell ineffizient sein kann, wenn Sie Tausende von Vektoren gleichzeitig bearbeiten. Matrizen aus Vektoren vermeiden dieses Problem, das auch als Vektorisierung bezeichnet wird. Was wohl eine nützlichere Klasse wäre, ist eine "Vektor" -Klasse, die viele Vektoren speichert und Verfahren für z.B. Normalisieren auf einmal etc. –

Antwort

4

ScientificPython hat eine Vector Klasse. Beispiel:

In [1]: from Scientific.Geometry import Vector 
In [2]: v1 = Vector(1, 2, 3) 
In [3]: v2 = Vector(0, 8, 2)    
In [4]: v1.cross(v2) 
Out[4]: Vector(-20.000000,-2.000000,8.000000) 
In [5]: v1.normal() 
Out[5]: Vector(0.267261,0.534522,0.801784) 
In [6]: v2.cross(v1) 
Out[6]: Vector(20.000000,2.000000,-8.000000) 
In [7]: v1*v2 # dot product 
Out[7]: 22.0 
5

Gefunden this, vielleicht kann es tun, was Sie wollen.

+0

Danke sieht gut aus. –

2

Ich glaube nicht, dass es irgendeinen Standard gibt (aber ich könnte falsch liegen, ich bleibe mit Python nicht so dicht dran).

Es ist sehr einfach zu implementieren, und Sie möchten vielleicht auf dem numpy Array als Container für sie trotzdem bauen, die Ihnen viele gute (und effiziente) Bits und Stücke.

+0

Danke, aber wäre ich in der Lage, Instanzmethoden dafür zu schreiben? d. h. der Array-Typ lässt mich dies tun: vector.Unitize() –

+0

Was ist das Besondere an Instanzmethoden? Oder benutzerdefinierte Klassen. Dies ist schließlich Python, nicht Java oder C#. Außerdem glaube ich, dass Simon Ihnen empfiehlt, das numpy-Array zu erweitern, was Ihnen Instanzmethoden geben würde, nein? –

Verwandte Themen