7 个版本
0.3.3 | 2023年11月14日 |
---|---|
0.3.2 |
|
0.3.0 | 2023年9月28日 |
0.2.3 |
|
0.1.0 | 2023年9月6日 |
#929 in 算法
65 每月下载量
92KB
1.5K SLoC
多维度数组
一个提供多维度数组高级操作的纯Rust库。
设计目标
该库的重点是提供一种简单且无bug的方式来编程多维度数组。特别是
- 数组的内部表示是密集的(boxed slice),但不是SIMD优化的(除非你显式地创建一个SIMD类型的数组)。
- 后端不集成BLAS,前端也不集成NumPy,因此这是我能做出的最简洁的设计。
- API将让NumPy和Rust的
std::iter
用户感到熟悉。 - 数组索引可以是实现
multidimension::Index
的任何类型,并且鼓励在数组索引之间进行类型区分。 - 该库提供了一种高级的方式来表示许多常见操作,并在必要时提供了安全、模块化的新操作编写方式。
示例
更多信息请参阅文档。
let a: Array<_, _> = usize::all(3).map(|x| x + 10).diagonal().collect();
assert_eq!(a.as_ref(), [
10, 0, 0,
0, 11, 0,
0, 0, 12,
]);
let a: Array<bool, usize> = Array::new((), [2, 1]);
let b: Array<usize, &str> = Array::new(3, ["apple", "body", "crane"]);
let ab: Array<bool, &str> = a.compose(b).collect();
assert_eq!(ab.as_ref(), ["crane", "body"])
let a: Array<usize, usize> = usize::all(3).collect();
let b: Array<usize, &str> = Array::new(3, ["apple", "body", "crane"]);
let ab: Array<usize, (usize, &str)> = a.zip(b).collect();
assert_eq!(ab.as_ref(), [
(0, "apple"),
(1, "body"),
(2, "crane"),
]);
let a: Array<_, _> = <(usize, usize)>::all((3, 2)).collect();
assert_eq!(a.as_ref(), [
(0, 0), (0, 1),
(1, 0), (1, 1),
(2, 0), (2, 1),
]);
let b: Array<_, _> = a.transpose::<(), usize, usize, ()>().collect();
assert_eq!(b.as_ref(), [
(0, 0), (1, 0), (2, 0),
(0, 1), (1, 1), (2, 1),
]);
贡献
欢迎!
© 2023 Alistair Turnbull。请使用 multidimension at minworks dot co dot uk。