rust-ndarray / ndarray

ndarray: an N-dimensional array with array views, multidimensional slicing, and efficient operations
https://docs.rs/ndarray/
Apache License 2.0
3.59k stars 307 forks source link

Are we ndarray yet? #597

Open LukeMathWalker opened 5 years ago

LukeMathWalker commented 5 years ago

Purpose

The idea behind this collection is to provide an index to easily navigate all currently open ndarray's issues which are immediately actionable. This is meant to be a good starting point for new contributors (e.g. what should I work on?) and it can also help existing contributors to identify trends and hot areas. I have pinned it using GitHub's new feature, so that it doesn't get lost (and stale).

Given that we have ~100 open issues (and more are opened every day), you are very welcome contributing to this taxonomy effort either commenting on this issue or editing it directly (if you have permissions to do so). I am only adding to this tracker things I can easily understand/where enough context is provided in the issue - if I left something along the way, feel free to add it and to provide more info on it.

New functionality

Documentation

Improvements

Documentation

LukeMathWalker commented 5 years ago

Going through all of these issues, I have starting to think at broader challenges which should probably fall under ndarray's umbrella or are relevant to the project:

oracleofnj commented 5 years ago

I've started taking a crack at einsum here. The implementation I have there has multiple issues (performance and otherwise) and is not at all ready for production, but is apparently correct. I'm actively working on improving the implementation. There's a web frontend that uses the crate as a WASM module deployed here.

LukeMathWalker commented 5 years ago

The front-end is what I dreamed I could have when I started to use np.einsum back in the days - quite cool @oracleofnj! Parsing the output correctly is definitely the first step there - then it comes down to properly optimizing the computation path based on the inputs and the specified contractions. What is your attack plan @oracleofnj?

oracleofnj commented 5 years ago

After reading through the implementations/documentation in numpy and opt_einsum, I'm writing the base cases to handle a single operand or a pair of operands and then I'll write a function that takes the general case along with a pre-specified path and iterates along the path using the base cases. Last will come an independent function (or functions) to optimize the path given the operand sizes.

oracleofnj commented 5 years ago

I published a beta version of my crate to crates.io. It still has some issues but it's far enough along that you are welcome to give it a spin. There is a minimal example (and more in the tests/benches) at the crate repo where you should feel free to open any issues - we can move the discussion there.

TheButlah commented 3 years ago

Just came across some missing functionality that might want to be tracked here: https://github.com/rust-ndarray/ndarray/issues/865 Equivalent numpy feature: slicing on a variable number of indices

lucascolley commented 2 months ago

If you would like a slightly easier task than implementing all of NumPy, a fantastic start would be to follow the Python array API standard specification (the parts that are relevant to Rust!)