#array #multidimensional-array #matrix #multidimensional #blas #higher-order

no-std ndarray

用于通用元素和数值的n维数组。轻量级数组视图和切片;视图支持分块和分割。

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.12015年12月27日

数据结构中排名第10

Download history 144622/week @ 2024-05-04 158785/week @ 2024-05-11 161522/week @ 2024-05-18 154966/week @ 2024-05-25 181235/week @ 2024-06-01 181088/week @ 2024-06-08 174661/week @ 2024-06-15 188041/week @ 2024-06-22 155921/week @ 2024-06-29 171316/week @ 2024-07-06 156393/week @ 2024-07-13 172482/week @ 2024-07-20 162738/week @ 2024-07-27 164589/week @ 2024-08-03 170751/week @ 2024-08-10 144782/week @ 2024-08-17

每月下载量674,350
1,890crate(1,009个直接)中使用

MIT/Apache

1MB
17K SLoC

ndarray实现了一个用于通用元素和数值的n维容器。

n维中,我们包括例如一维行或列、二维矩阵和更高维的数组。如果数组有n维,则通过使用那么多索引来访问数组中的元素。每个维度也称为一个

亮点

  • 泛型n维数组
  • 切片,也可以使用任意步长,以及使用负索引表示轴末端的元素。
  • 数组的视图和子视图;产生子视图的迭代器。
  • 高阶操作和算术性能良好
  • 可以使用ArrayView::fromArrayViewMut::from从任何[T]数据中切片和修改数组视图。
  • Zip用于在两个或更多数组或其他项目生产者(NdProducer trait)之间同步函数应用。

lib.rs:

ndarray crate提供了一个用于通用元素和数值的n维容器。

n维中,我们包括例如一维行或列、二维矩阵和更高维的数组。如果数组有n维,则通过使用那么多索引来访问数组中的元素。每个维度也称为一个

  • ArrayBase:n 维数组类型的本身。
    它被用来实现所有权属数组和视图;查看其文档以了解所有数组功能的概述。
  • 主要的特定数组类型是 Array,它拥有自己的元素。

亮点

  • 泛型n维数组
  • 切片,也可以使用任意步长,以及负索引表示轴末端的元素。
  • 数组的视图和子视图;产生子视图的迭代器。
  • 高阶操作和算术性能良好
  • 可以使用ArrayView::fromArrayViewMut::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

对于在 ndarraynalgebraimage 之间进行转换,请查看 nshare

依赖关系

~0.4–1.3MB
~25K SLoC