4个版本

0.2.1 2024年6月20日
0.2.0 2024年6月20日
0.1.1 2024年6月14日
0.1.0 2024年6月14日

#486 in 数学

29每月下载量

MIT许可证

54KB
1K SLoC

License Crates.io Docs CI

dimensionals

dimensionals是一个用于处理n维数据的Rust库。它提供了一个灵活且高效的n维数组实现,具有通用的存储后端。

动机

dimensionals背后的关键动机包括

  • 简洁、惯用的Rust API,利用Rust的类型系统和所有权模型。
  • 通过高效的内存布局和缓存友好的遍历实现高性能。
  • 通过通用的存储后端实现可扩展性,允许自定义存储策略。
  • 为针对GPU和利用SIMD指令的通用计算管道奠定基础。

特性

  • 泛型元素类型、维度数和存储后端
  • 迭代器、切片、索引和其他标准Rust特性
  • 针对算术操作实现了直观且惯用的std::ops实现
  • 方便的宏用于创建向量和矩阵

用法

将此内容添加到您的Cargo.toml

[dependencies]
dimensionals = "0.1.0"

然后,在Rust代码中使用该包

use dimensionals::{matrix, Dimensional, LinearArrayStorage};

fn main() {
    let m: Dimensional<i32, LinearArrayStorage<i32, 2>, 2> = matrix![
        [1, 2, 3],
        [4, 5, 6]
    ];
    assert_eq!(m[[0, 0]], 1);
    assert_eq!(m[[1, 1]], 5);
}

有关更多示例和用法详情,请参阅API文档

路线图

以下功能和改进计划将在未来的版本中实现

  • 一维和二维数组的算术操作
  • 对SIMD的支持,以在CPU上提高性能。
  • 对GPU的支持,以将计算卸载到兼容的GPU。
  • 全面的标量、向量、矩阵和张量代数操作。
  • 重新塑形和附加操作,以便轻松处理数据。
  • 适用于各种场景的额外存储后端,以优化内存使用。
  • 与流行的Rust科学计算库集成。

性能

LinearArrayStorage后端将元素存储在连续的Vec<T>中,并在运行时计算元素索引。这为遍历提供了良好的缓存局部性,但可能不是稀疏或非常高维数组的最优选择。

可以通过定义一个实现了DimensionalStorage特质的类型来实现替代存储后端。

贡献

欢迎贡献!请随时提交问题、功能请求或拉取请求到GitHub 仓库

许可证

本项目采用MIT 许可证

致谢

本项目受到来自Rust和其他语言中多个现有多维数组库的灵感和构建。

联系方式

巫妖实验室 - https://github.com/warlock-labs

项目链接: https://github.com/warlock-labs/dimensionals

依赖

~155KB