Skip to content

ndarray::stack changed behavior w.r.t layout between 0.15.1 and 0.15.2 #1070

@msalib

Description

@msalib

Before 0.15.3, stack would return an array with C-layout when given C-layout views. But with 0.15.3, this behavior changed and now we get F-layout outputs. This demonstration program will succeed if you pin ndarray to "=0.15.2" and fail if you pin to "=0.15.3":

use ndarray::{arr2, stack, Axis};

fn main() {
    // Here are some 2x3 arrays.
    let a = arr2(&[[1, 2, 3], [4, 5, 6]]);
    let b = &a * 2;
    assert_eq!(a.shape(), b.shape());
    assert_eq!(a.shape(), [2, 3]);

    // When we stack them with Axis(2), we'll get a 2x3x4 array
    // with the last dimension stored continuously.
    let c = stack(Axis(2), &[a.view(), b.view(), a.view(), b.view()]).unwrap();
    assert_eq!(c.shape(), [2, 3, 4]);
    assert!(c.is_standard_layout());
    dbg!(&c);
}

I don't see anything about the layout of stack's return value in the docs so I assumed that it would match the inputs. So even if no code behavior change is warranted, the docs should really include a note explaining that you might get a different layout than your inputs.

Metadata

Metadata

Assignees

No one assigned

    Labels

    docsIssues relating primarily to documentation or API visibility.

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions