Simple, general, pure Python vectors

## Project description

Simple, general, pure Python vectors

hypervector.py defines an infinite-dimensional Vector type for all your vectoring needs. Instances of Vector are immutable and come with a wide array of useful operations and features.

hypervector is in the public domain.

## A few explanatory examples

Hello world

>>> from hypervector import Vector
>>> (Vector(1, 2, 1) + Vector(3, 0, 2)).xy
Vector(4, 2)

King of infinite (vector) space

>>> vec = Vector(2, 4)
>>> (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.

The unit tests can be run with tox. If you run into any slow data generation errors, use

## Why infinite dimensions?

Because generalizing things is fun and having infinite dimensions is somewhat easier and simpler than having an abstract Vector type with arbitrary (but finite) dimensions.

It is worth noting that Vector plays a little fast and loose with the concept of infinite dimensions, as it has a concept of “relevant” dimensions which is exposed through iteration, string representations, and a few other places to a lesser extent.
Similarly, there is no way to have a Vector with infinite non-zero components.

## 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:
• numpy

• pyeuclid — Has (among other things) Vector2 and Vector3 types. Also has packages for Python 2 and Python 3.

## Project details

Uploaded source