/lazynumpy

A lazy evaluated wrapper around numpy for chained matrix multiplication

Primary LanguagePythonMIT LicenseMIT

Build Status codecov Documentation Status

lazynumpy

a lazy evaluated wrapper around numpy

What is gained?

  • Chained matrix multiplication will be minimized by keeping the values of the other arrays in memory and solving the associative problem that minimizes the number of computations.
    • only keeps one copy of each matrix [Memory optimization in progress]
  • Allow partial matrix returns withou calculating the entire matrix [In Progress]

If you have three matrices with dimensions as below there are two ways to do the matrix multiplication to find the answer:

Either:

or

[1] will take 1000 * 1 * 1000 operations to calculate A * B plus 1000 * 1000 * 1000 operations to calculate (A * B) * C. The total sum to calculate A * B * C is equal to 1000^3 + 1000^2.

[2] will take 1 * 1000 * 1000 operations to calculate B * C plus 1000 * 1 * 1000 operations to calculate A * (B * C). The total sum to calculate A * B * C is equal to 1000^2 + 1000^2 which means the optimal multiplication order will be ~500 faster.

If you run the simple example you should see a significant speed up. On my computer there is a 50x speedup with only three matrix calculations.

Installation

pip install lazynumpy