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 每月下载次数

MIT 许可证

52KB
844

numas

Build Status License: MIT

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