How to convert a vector if Arrays into an Array along a new dimension? #1150
-
Suppose that we have a vector of 5 Arrays. Also let the shapes of theses Arrays be uniform and known, say (3, 3). let a: Vec<Array2<f64>> = vec![ # five Arrays ]; Do we have any constructor method to create a new Array of shape (5, 3, 3) from this vector? |
Beta Was this translation helpful? Give feedback.
Answered by
jturner314
Jan 22, 2022
Replies: 1 comment 2 replies
-
This is an area which could be improved. There are a couple of ways to do this using existing functionality: use ndarray::prelude::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let owned: Vec<Array2<f64>> = vec![Array2::zeros([3, 3]), Array2::ones([3, 3])];
// Option 1:
let views: Vec<ArrayView2<'_, f64>> = owned.iter().map(|arr| arr.view()).collect();
let stacked = ndarray::stack(Axis(0), &views)?;
println!("Option 1:\n{stacked}\n");
// Option 2:
let mut stacked: Array3<f64> = Array3::zeros([0, 3, 3]);
for arr in &owned {
stacked.push(Axis(0), arr.view())?;
}
println!("Option 2:\n{stacked}\n");
Ok(())
} |
Beta Was this translation helpful? Give feedback.
2 replies
Answer selected by
zgbkdlm
# for free
to join this conversation on GitHub.
Already have an account?
# to comment
This is an area which could be improved. There are a couple of ways to do this using existing functionality:
(Playg…