/hypervector

Simple, general, pure Python vectors

Primary LanguagePythonThe UnlicenseUnlicense

hypervector

Simple, general, pure Python vectors

hypervector.py defines arbitrary-dimentional vector types for all your vectoring needs. The vectors are immutable and come with many useful and well-tested vector operations and features.

hypervector is in the public domain.

A few explanatory examples

Hello world, NOW IN 3D!

>>> from hypervector import Vector3
>>> (Vector3(1, 2, 1) + Vector3(3, 0, 2)).zxy
Vector3(3, 4, 2)

Higher dimensions

>>> from hypervector import Vector, Vector2, Vector3
>>> Vector2 is Vector[2] and Vector3 is Vector[3]
True
>>> Vector[4](1, 2, 3, 4)
Vector[4](1, 2, 3, 4)
>>> Vector[5](1, 2, 3, 4)
Vector[5](1, 2, 3, 4, 0)
>>> Vector[10].zero
Vector[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

King of infinite (vector) space

>>> vec = Vector(2, 4)  # Dimensionless vectors are "infinite"
>>> (vec[0], vec[1], vec[2], vec[1114111])
(2, 4, 0, 0)

Cross-eyed

>>> vec_1, vec_2 = Vector(1, 2, 3), Vector(3, 2, 1)
>>> Vector.cross(vec_1, vec_2)
Vector(-4.0, 8.0, -4.0)
>>> [Vector.dot(_, vec) for vec in (vec_1, vec_2)]
[0.0, 0.0]
>>> vec_3 = Vector(-1, 8, 3, 2)
>>> Vector.cross(vec_1, vec_2, vec_3)
Vector(8.0, -16.0, 8.0, 56.0)
>>> [Vector.dot(_, vec) for vec in (vec_1, vec_2, vec_3)]
[0.0, 0.0, 0.0]

Testing

hypervector uses py.test and hypothesis, with tox as a test runner.

How fast is hypervector?

Dunno. Probably pretty slow. If you need speed, use numpy.

Alternatives

There are many other libraries with similar features to hypervector. Some notable examples I have used:
  • numpy
  • pyeuclid — Has unrelated Vector2 and Vector3 classes. Also has two separate packages for Python 2 and Python 3.
Get hypervector from PyPI: pip install hypervector
Report bugs and offer suggestions at the github issues page.