Я не очень знаком с ndarray
, но похоже, что вам нужно сгладить данные в качестве промежуточного шага, а затем перестроить из этого.Итератор, вероятно, был бы более эффективным, но я не вижу метода построения из итератора, который бы также позволял указывать фигуру.
Вероятно, это не самый эффективный способ к этому, но это, по крайней мере, работает:
fn to_array2<T: Copy>(source: &[Array1<T>]) -> Result<Array2<T>, impl std::error::Error> {
let width = source.len();
let flattened: Array1<T> = source.into_iter().flat_map(|row| row.to_vec()).collect();
let height = flattened.len() / width;
flattened.into_shape((width, height))
}
Обратите внимание, что может произойти сбой, если исходные массивы имеют разную длину.Это решение не на 100% надежно, потому что оно не будет работать, если один массив меньше, но компенсируется другим массивом длиннее.Вероятно, стоит добавить чек, чтобы предотвратить это, но я оставлю это вам.