Accept owned arrays in `concatenate` and `stack`

Open
#1,591 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
45/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Quiet
Tech stack
rust
Domain
data

Research direction

Start by reading the current concatenate and stack entry points and their signatures. Check how they accept views, how owned arrays would fit, and what happens for an empty slice. Done means the proposed API works for owned arrays and views without leaving the documented inference concern unresolved.

Written by the indexing model from the issue text.

Description

breaking-change enhancement

It would be convenient to be able to call concatenate or stack with a slice of owned arrays or array views, rather than just views currently.

So for concatenate, this:

let arrays = vec![a, b, c]; // more realistically, this would be returned by a function
let arrays = arrays.iter().map(|a| a.view()).collect::<Vec<_>>();
let res = ndarray::concatenate(Axis(2), &arrays);

would become:

let arrays = vec![a, b, c];
let res = ndarray::concatenate(Axis(2), &arrays);

This could be done by changing the signature of concatenate to the following, which would allow either views or owned arrays:

-pub fn concatenate<A, D>(axis: Axis, arrays: &[ArrayView<A, D>]) -> Result<Array<A, D>, ShapeError>
+pub fn concatenate<S, D, A>(axis: Axis, arrays: &[ArrayBase<S, D, A>]) -> Result<Array<A, D>, ShapeError>
 where
+    S: Data<Elem = A>,
     A: Clone,
     D: RemoveAxis,
 {

This is technically a breaking API change though, at least in the niche case of passing an empty slice as a parameter (which causes a type inference error). Before I open an unsolicited PR, would there be interest in this change?

Dominant language
Rust
Stars
4.3k
Forks
391
PR merge metrics
No merged PRs in 30d

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from rust-ndarray/ndarray

All issues in rust-ndarray/ndarray

Similar issues

More Rust issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.