90个版本
0.16.1 | 2024年8月14日 |
---|---|
0.15.6 | 2022年7月30日 |
0.15.4 | 2021年11月23日 |
0.15.3 | 2021年6月5日 |
0.3.0-alpha.1 | 2015年12月27日 |
在数据结构中排名第10
每月下载量674,350
在1,890个crate(1,009个直接)中使用
1MB
17K SLoC
ndarray
实现了一个用于通用元素和数值的n维容器。
在n维中,我们包括例如一维行或列、二维矩阵和更高维的数组。如果数组有n维,则通过使用那么多索引来访问数组中的元素。每个维度也称为一个轴。
亮点
- 泛型n维数组
- 切片,也可以使用任意步长,以及使用负索引表示轴末端的元素。
- 数组的视图和子视图;产生子视图的迭代器。
- 高阶操作和算术性能良好
- 可以使用
ArrayView::from
和ArrayViewMut::from
从任何[T]
数据中切片和修改数组视图。 Zip
用于在两个或更多数组或其他项目生产者(NdProducer
trait)之间同步函数应用。
lib.rs
:
ndarray
crate提供了一个用于通用元素和数值的n维容器。
在n维中,我们包括例如一维行或列、二维矩阵和更高维的数组。如果数组有n维,则通过使用那么多索引来访问数组中的元素。每个维度也称为一个轴。
亮点
- 泛型n维数组
- 切片,也可以使用任意步长,以及负索引表示轴末端的元素。
- 数组的视图和子视图;产生子视图的迭代器。
- 高阶操作和算术性能良好
- 可以使用
ArrayView::from
和ArrayViewMut::from
从任何[T]
数据中切片和修改数组视图。 - [
Zip
] 用于在两个或更多数组或其他项目生产者(NdProducer
特性)之间执行步调一致的函数应用。
包状态
-
仍在迭代和改进包
- 包持续发展,版本之间的演变过程中可能会出现破坏性更改。如有需要,我们将采用最新的稳定 Rust 功能。
- 请注意,隐藏在文档中的函数/方法/特性等不被视为公共 API 的一部分,因此对它们的更改不被视为破坏性更改。
-
性能
- 优先考虑数组的更高阶方法和算术操作,然后是迭代,最后优先使用索引算法。
- 如
.map()
、.map_inplace()
、.zip_mut_with()
、[Zip
] 和azip!()
等更高阶函数是最有效的执行单次遍历和锁步遍历的方法。 - 操作的性能取决于数组或数组视图的内存布局。特别是对于二进制操作,需要匹配的内存布局才能高效(有一些例外)。
- 即使是对于非常大的矩阵,也能高效地进行浮点矩阵乘法;可以选择使用 BLAS 来进一步改进。
-
MSRV:需要 Rust 1.64 或更高版本
包特性标志
以下包特性标志可用。它们在您的 Cargo.toml
中配置。有关更多信息,请参阅 doc::crate_feature_flags
。
std
:使用 Rust 标准库的功能(默认启用)serde
:serde 1.x 的序列化支持rayon
:并行迭代器,并行方法,parallel
模块和par_azip!
。approx
实现approx
包中的特性。blas
:矩阵乘法透明 BLAS 支持,需要配置。matrixmultiply-threading
:使用来自matrixmultiply
的线程。
文档
-
关于
ArrayBase
的文档提供了对 n 维数组类型的概述。其他值得查看的页面包括s![]
和azip!()
宏的文档。 -
如果你有使用 NumPy 的经验,你可能还会对
ndarray_for_numpy_users
感兴趣。
ndarray 生态系统
ndarray
提供了大量的功能,但并不是一个一站式解决方案。
ndarray
包含矩阵乘法和其他二进制/一元操作。更高级的线性代数例程(例如 SVD 分解或特征值计算)可以在 ndarray-linalg
中找到。
对于统计学也是如此:ndarray
提供了一些基本功能(例如 mean
),但更高级的例程可以在 ndarray-stats
中找到。
如果你想要生成随机数组,可以查看 ndarray-rand
。
依赖关系
~0.4–1.3MB
~25K SLoC