Vector math utilities for Python built on NumPy
The vectormath
package provides a fast, simple library of vector math
utilities by leveraging NumPy. This allows explicit
geometric constructs to be created (for example, Vector3
and Plane
)
without redefining the underlying array math.
The vectormath
package includes Vector3
/Vector2
and
Vector3Array
/Vector2Array
.
- Speed: All low-level operations rely on NumPy arrays. These are densely packed,
typed, and partially implemented in C. The
VectorArray
classes in particular take advantage of this speed by performing vector operations on all Vectors at once, rather than in a loop. - Simplicty: High-level operations are explicit and straight-forward. This library should be usable by Programmers, Mathematicians, and Geologists.
- NumPy can be used for any array operations
- Many small libraries on PyPI (e.g. vectors) implement vector math operations but are are only built with single vectors in mind.
- properties uses
vectormath
as the underlying framework for Vector properties.
To install the repository, ensure that you have pip installed and run:
pip install vectormath
For the development version:
git clone https://github.com/seequent/vectormath.git cd vectormath pip install -e .
This example gives a brief demonstration of some of the notable features of
Vector3
and Vector3Array
import numpy as np
import vectormath as vmath
# Single Vectors
v = vmath.Vector3(5, 0, 0)
v.normalize()
print(v) # >> [1, 0, 0]
print(v.x) # >> 1.0
# VectorArrays are much faster than a for loop over Vectors
v_array = vmath.Vector3Array([[4, 0, 0], [0, 2, 0], [0, 0, 3]])
print(v_array.x) # >> [4, 0, 0]
print(v_array.length) # >> [4, 2, 3]
print(v_array.normalize()) # >> [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
# Vectors can be accessed individually or in slices
print(type(v_array[1:])) # >> vectormath.Vector3Array
print(type(v_array[2])) # >> vectormath.Vector3
# All these classes are just numpy arrays
print(isinstance(v, np.ndarray)) # >> True
print(type(v_array[1:, 1:])) # >> numpy.ndarray
Current version: v0.2.2