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
VectorArrayclasses 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
vectormathas 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