Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/lokeshh/numru
NumPy for RUby = NumRu
https://github.com/lokeshh/numru
hacktoberfest numpy python ruby
Last synced: 23 days ago
JSON representation
NumPy for RUby = NumRu
- Host: GitHub
- URL: https://github.com/lokeshh/numru
- Owner: lokeshh
- License: mit
- Created: 2018-02-18T12:09:24.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2020-10-11T15:50:22.000Z (about 4 years ago)
- Last Synced: 2024-10-15T03:53:19.819Z (2 months ago)
- Topics: hacktoberfest, numpy, python, ruby
- Language: Ruby
- Homepage:
- Size: 20.5 KB
- Stars: 5
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.txt
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# NumRu (NumPy in Ruby)
NumRu is adoption of NumPy in Ruby. The aim is not just to port NumPy to Ruby but to adopt it to Ruby syntax and ease.
## Installation
1. You need Python 2 for this to work. It uses `rubypython` which currently only works for Python 2 but work is underway to make it work for Python 3.
2. Install `numpy` package for Python.
3. Add this line to your application's Gemfile:
```ruby
gem 'numru'
```And then execute:
$ bundle
Or install it yourself as:
$ gem install numru
## Usage
1. Whatever works in NumPy works here. If there's something that doesn't work let me know in the issues.
```rb
require 'numru'
nr = NumRu> x = nr.array 0..10
=> array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])> x = nr.arange(27).reshape 3, 3, 3
=> array([[[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8]],[[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17]],[[18, 19, 20],
[21, 22, 23],
[24, 25, 26]]])```
2. Keyword arguments are not supported. For that use hash instead.
```rb
> x = nr.array [1, 2, 3], dtype: :complex
=> array([1.+0.j, 2.+0.j, 3.+0.j])> x = nr.array [1, 2, 3], dtype: nr.int32
=> array([1, 2, 3], dtype=int32)
```
3. Indexing is similar to numpy except it use Ruby Range instead of Python Slice
```rb
> x = nr.array(20.times.map { |i| i**2 }).reshape 4, 5
=> array([[ 0, 1, 4, 9, 16],
[ 25, 36, 49, 64, 81],
[100, 121, 144, 169, 196],
[225, 256, 289, 324, 361]])
> x[0]
=> array([[ 0, 1, 4, 9, 16]])
> x[[0, 1]]
=> array([[ 0, 1, 4, 9, 16],
[25, 36, 49, 64, 81]])
> x[0..1]
=> array([[ 0, 1, 4, 9, 16],
[25, 36, 49, 64, 81]])
> x[0..-1, -1]
=> array([ 16, 81, 196, 361])
> x[0..-1, -2..-1]
=> array([[ 9, 16],
[ 64, 81],
[169, 196],
[324, 361]])```
4. Slicing is supported too but it has to be wrapped inside quotes
```rb
> x = nr.arange(25).reshape(5, 5).T
=> array([[ 0, 5, 10, 15, 20],
[ 1, 6, 11, 16, 21],
[ 2, 7, 12, 17, 22],
[ 3, 8, 13, 18, 23],
[ 4, 9, 14, 19, 24]])
> x['::', '::-1']
=> array([[20, 15, 10, 5, 0],
[21, 16, 11, 6, 1],
[22, 17, 12, 7, 2],
[23, 18, 13, 8, 3],
[24, 19, 14, 9, 4]])
> x[':3', ':3']
=> array([[ 0, 5, 10],
[ 1, 6, 11],
[ 2, 7, 12]])```
5. Operators work the way you expect
```rb
> x = nr.array 1..5
=> array([1, 2, 3, 4, 5])
> x > 3
=> array([False, False, False, True, True])
> x == 3
=> array([False, False, True, False, False])
> x * 2
=> array([ 2, 4, 6, 8, 10])
> x * x
=> array([ 1, 4, 9, 16, 25])
> x % 3
=> array([1, 2, 0, 1, 2])```
## In development
The motive is not just to build a wrapper for NumPy but to adapt it to Ruby.
Rough plan
1. Provide all numpy functionality
2. Provide `map`, `each`, etc.
3. TODO: Think and discuss how to rubify the API## Contributing
* To report bugs please create an issue [here](https://github.com/lokeshh/numRu/issues)
* If you have fixed a bug, then please create a PR [here](https://github.com/lokeshh/numRu/pulls). While creating a PR please follow [contributing guidelines](CONTRIBUTING.md)Note - This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
## License
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
## Code of Conduct
Everyone interacting in the Numru project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/numru/blob/master/CODE_OF_CONDUCT.md).