项目作者: bamos

项目描述 :
An intelligent block matrix library for numpy, PyTorch, and beyond.
高级语言: Python
项目地址: git://github.com/bamos/block.git
创建时间: 2017-02-06T16:50:25Z
项目社区:https://github.com/bamos/block

开源协议:Apache License 2.0

下载


Block • License PyPi

An intelligent block matrix library for numpy, PyTorch, and beyond.
Crafted by Brandon Amos with significant
contributions by Eric Wong.


Why do we need an intelligent block matrix library?

Let’s try to construct the KKT matrix from Mattingley and Boyd’s
CVXGEN
paper in numpy and PyTorch:

Without block, there is no way to infer the appropriate sizes of
the zero and identity matrix blocks.
It is an inconvenience to think about what size these
matrices should be.

What does block do?

Block acts a lot like np.bmat and replaces:

  • Any constant with an appropriately shaped block matrix
    filled with that constant.
  • The string 'I' with an appropriately shaped identity matrix.
  • The string '-I' with an appropriately shaped negated identity matrix.
  • [Request more features.]

Isn’t constructing large block matrices with a lot of zeros inefficient?

Yes, block is meant to be a quick prototyping tool and
there’s probably a more efficient way to solve your system
if it has a lot of zeros or identity elements.

How does block handle numpy and PyTorch with the same interface?

I wrote the logic to handle matrix sizing to be agnostic
of the matrix library being used.
numpy and PyTorch are just backends.
More backends can easily be added for your favorite
Python matrix library.

  1. class Backend(metaclass=ABCMeta):
  2. @abstractmethod
  3. def extract_shape(self, x): pass
  4. @abstractmethod
  5. def build_eye(self, n): pass
  6. @abstractmethod
  7. def build_full(self, shape, fill_val): pass
  8. @abstractmethod
  9. def build(self, rows): pass
  10. @abstractmethod
  11. def is_complete(self, rows): pass

Getting Started

  • Install: pip install block
  • Usage: from block import block
  • Run tests in test.py: nosetests test.py

Issues and Contributions

I’d be happy to hear from you about any issues or features you
add, please file an issue
or send in a PR.

Licensing

This repository is
Apache-licensed.