4个版本
使用旧的Rust 2015
0.1.3 | 2015年9月30日 |
---|---|
0.1.2 | 2015年9月30日 |
0.1.1 | 2015年9月30日 |
0.1.0 | 2015年9月30日 |
#2594 in 算法
88 每月下载量
在candlelighter中使用
27KB
523 行
此库提供了创建和处理多维数组的方法。它基本上试图将 Box<[T]>
, &[T]
和 &mut[T]
通用到多个维度,并提供了一些方便的方法,允许您进行切片、创建低维切片、子采样或反转视图,甚至交换维度(例如,创建2D矩阵的转置视图)。
示例
在下面的示例中,您将看到如何创建一个3D数组及其两个视图(2D和1D)。
use multiarray::*;
let mut voxels = Array3D::new([3,4,5], 0); // 3x4x5 ints
voxels[[0,0,0]] = 1;
voxels[[1,2,3]] = 23;
voxels[[2,3,4]] = 42;
assert!(voxels[[1,2,3]] == 23);
let slice = voxels.eliminated_dim(1, 2); // 2D slice
assert!(slice[[1,3]] == 23);
let lane = slice.eliminated_dim(1, 3); // 1D lane
assert!(lane[1] == 23);
在这里,slice
是3D体积的2D切片(在y=2处),而 lane
是一个一维视图,它还充当ExactSize/DoubleEnded迭代器。
lib.rs
:
此软件包提供了处理多维数据的数据类型。它基本上试图将 Box<[T]>
, &[T]
和 &mut [T]
通用到多个维度。作为副作用,它还支持具有非一维步长的数组。
示例
以下是一个3D数组的示例。创建了一个2D视图和一个1D视图来查看数据的一部分。
use multiarray::*;
let mut voxels = Array3D::new([3,4,5], 0); // 3x4x5 ints
voxels[[0,0,0]] = 1;
voxels[[1,2,3]] = 23;
voxels[[2,3,4]] = 42;
assert!(voxels[[1,2,3]] == 23);
let slice = voxels.eliminated_dim(1, 2); // 2D slice
assert!(slice[[1,3]] == 23);
let lane = slice.eliminated_dim(1, 3); // 1D lane
assert!(lane[1] == 23);
请注意,[usize; N]
被用作索引。为了方便,一维情况也支持除了[usize; 1]
之外,也支持usize
作为索引,一维视图可以通过&[T]
和&mut[T]
借用的切片,通过std::convert::{ From, Into }
转换,并且也实现了Iterator
、ExactSizeIterator
和DoubleEndedIterator
迭代器特性。