17次发布
使用旧的Rust 2015
0.2.7 | 2019年7月24日 |
---|---|
0.2.5 | 2019年5月1日 |
0.2.4 | 2019年4月22日 |
0.1.9 | 2019年4月17日 |
0.1.0 | 2019年3月28日 |
#2124 in 数据结构
32 每月下载次数
52KB
844 行
numas
numas 是一个 Rust 库,实现了通用的多维数组。
内容
- 多维数组支持
- 多维视图支持
- 随机工厂、填充器和其他工厂
- 数组的双曲、三角、算术、对数、指数和舍入函数
用法
初始化数组
数组可以通过多种方式初始化,例如工厂或调用 new
方法。
let array = Array::new(vec![1,2,3,4,5,6], vec![2, 3]);
// Creates array with elements from 1 to 6 and shape of two dimensions with 2 and 3 length
重塑
有时需要更改数组的形状。实际上有两种方法可以实现这一点。
reshape
使用reshape
返回被调用方法的数组。这种行为允许流畅/构建器模式接口,从而实现方法链式调用。set_shape
方法set_shape
仅设置形状,没有返回值。
函数
大多数函数都可通过数组实例访问。
let array = Array::new(vec![1,2,3,4,5], vec![5]);
array.sin(); // Returns new array with elements equal to sin(1), sin(2)...
array.cos();
array.sqrt();
//etc.
运算符
目前支持数组上的基本数学运算符 - 加、减、乘、除和取反,所有都是逐元素。也实现了它们的赋值等效函数(+=, -= ...)
视图
numas 以与数组相同的方式实现视图,因此视图充当数组,可以进行所有数组操作,但修改元素也会影响原始数组。
// Create new linear array with elements from 1 to 9
let array = Array::new(vec![1,2,3,4,5,6,7,8,9], vec![9]);
// Create view into array of index from 3 to 6 (elements 4,5,6,7)
let mut view = array.get(s![3 => 7]);
// Multiply view by 10, also possible to pass whole array with same shape as view
view *= u![10];
// Now elements in view are 40, 50, 60, 70
// Modifying elements in view also affects origin array
// origin array now contains elements 1, 2, 3, 40, 50, 60, 70, 8, 9
宏
目前有以下宏
s
宏 s!
用于方便的数组索引。使用示例如下
let view = array.get(s![0; 1 => 3]);
// Array view now contains first row of array columns from index 1 to 3 (excluded) and its shape is onedimensional of length 2
u
宏 u!
用于创建“单元数组”。单元数组是只有一个元素的数组,其形状为一维长度为一。
let array = u![7];
// Creates array of element 7
// Equivalent would be Array::new(vec![7], vec![1]);
tuple
宏 tuple!
是在 u!
内部使用的内部宏。它不应该被用户使用。如果只提供了一个值,它会将值 0
推送到提供的向量中。如果提供了两个值,它会将它们都推送进去。
let mut vec: Vec<i32> = Vec::new();
tuple![vec; 1, 5];
// vec now contains [1, 5]
tuple![vec; 6]
// vec now contains [1, 5, 6, 0]
依赖项
~550–780KB
~10K SLoC