矩阵列迭代器

问题描述 投票:0回答:1

我正在尝试实现在 Rust 中获取矩阵列上的只读迭代器的方法(

Vec<Vec<u64>>
,不是平坦的,并且在现实世界中矩阵将以不同的方式存储,但假设如此)。

Python 中应该类似这样:

>>> m = [[1,2], [3,4]]
>>> list(zip(*m))
[(1, 3), (2, 4)]

我理解由于借用规则可能会很复杂。但由于一次可以有多个只读引用,这似乎是可能的。

rust matrix iterator
1个回答
0
投票

这在 Rust 中并不太复杂。

pub fn column_iterator<T>(v: &[Vec<T>]) -> impl Iterator<Item = &T> {
    let width = v.first().map(|f| f.len()).unwrap_or(0);
    (0..width).flat_map(|y| v.iter().map(move |row| &row[y]))
}

对于更复杂的矩阵运算,请考虑使用 ndarray,它有一个

columns
方法。

use ndarray::{ArrayBase, Data, Ix2};

pub fn column_iterator<'a, T>(
    v: &'a ArrayBase<impl Data<Elem = T>, Ix2>,
) -> impl Iterator<Item = &'a T>
where
    T: 'a,
{
    v.columns().into_iter().flatten()
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.