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每月下载量
54KB
1K SLoC
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
依赖
~155KB