ndarray:遍历随机排列的行

时间:2020-10-15 20:10:21

标签: multidimensional-array rust permutation

我正在寻找一种有效的方法来迭代ndarray中二维数组中行的排列。我不需要更改或保留排列的数组,因此我想避免复制。

也就是说,我要执行以下操作,除了select分配不必要的数组:

use ndarray::{Axis, Array}; // 0.13.1
use rand::seq::SliceRandom; // 0.7.3
use std::iter::FromIterator;

fn main() {
    let array = Array::from_iter(0..15).into_shape((5, 3)).unwrap();
    println!("Before shuffling rows:\n{}", array);
    
    let mut permutation: Vec<usize> = (0..array.nrows()).collect();
    permutation.shuffle(&mut rand::thread_rng());
    let permuted = array.select(Axis(0), &permutation);
    
    for (i, row) in permuted.axis_iter(Axis(0)).enumerate() {
        println!("Row number {} is {}!", i, row);
    }
}

Playground

我知道ndarray Github页面包含类似内容的example,但其中包含一些我不理解的不安全代码,因此宁愿不适应自己的用例

1 个答案:

答案 0 :(得分:0)

使用index_axis,我错过了一个明显的答案:

[{ 'id':2,'name': 'AB','subject': ['Physics','Engineering'],'type':'Permanent','Location':'NY'},{'id':4,'name':'ABCD','subject': ['Physics','Engineering'],'type':['Contract','Guest'],'Location':'NY'}]

不过,我敢肯定有更好的方法可以做到这一点,而且我仍然很想看到它们。