Jumpy: Python interface for [nd4j](https://nd4j.org)
===========================================

[![Join the chat at https://gitter.im/deeplearning4j/deeplearning4j](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/deeplearning4j/deeplearning4j?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/eclipse/deeplearning4j/blob/master/jumpy/LICENSE)
[![PyPI version](https://badge.fury.io/py/jumpy.svg)](https://badge.fury.io/py/jumpy)

Jumpy allows you to use ND4J from Python _without any network communication_. Many other Python libraries bridging Java
have considerable overhead, jumpy uses pointers to directly access your numpy arrays. Under the hood, Jumpy uses `pydl4j` 
for dependency management and `pyjnius` to load Java classes.

## Installation

Jumpy is on PyPI, simply install it with

```bash
pip install jumpy
```

or build it from source:

```bash
python setup.py install
```

## Using Jumpy

### Creating arrays

Just like numpy, you can initialize an array using `.zeros()` or `.ones()`

```python
import jumpy as jp

x = jp.zeros((32, 16))
y = jp.ones((32, 16))
```

### Converting numpy array to jumpy array

A numpy `ndarray` instance can be converted to a jumpy `ndarray` instance (and vice-versa) without copying the data

```python
import jumpy as jp
import numpy as np

x_np = np.random.random((100, 50))
x_jp = jp.array(x_np)
```

### Converting jumpy array to numpy array

Simply call the `.numpy()` method of `jumpy.ndarray.ndarray`

```python
import jumpy as jp

x_jp = jp.zeros((100,50))
x_np = x_jp.numpy()
```

### Operations

* Basic operators like `+` `-` `*` `/` `+=` `-=` `*=` `/=` are overloaded and broadcasting is supported.
* Indexing, slicing and assignment behaviour has been made as close to numpy as possible.
* Check `jumpy/ops/` to see available ops.

---
## Contribute

* Check for open issues, or open a new issue to start a discussion around a feature idea or a bug.
* We could use more ops! Have a look at available ops (`jumpy/ops/`), it's quite easy to add new ones.
* Send a pull request and bug us on Gitter until it gets merged and published. :)