| Crates.io | ndarray-layout |
| lib.rs | ndarray-layout |
| version | 0.2.2 |
| created_at | 2024-12-10 05:46:18.80389+00 |
| updated_at | 2025-04-29 13:38:47.968416+00 |
| description | This crate provides definitions and transformations for multi-dimensional array data layouts. |
| homepage | |
| repository | https://github.com/InfiniTensor/ndarray-layout.git |
| max_upload_size | |
| id | 1478162 |
| size | 52,045 |
ndarray-layout 是一个用于处理多维数组布局的 crate,它提供了 ArrayLayout 结构体,用于高效管理和操作多维数组的元信息,如形状、步长和偏移量等。这个库在处理多维数组时,提供了灵活且高效的布局管理方式,能够满足不同场景下对数组布局的操作需求。
ArrayLayout 结构体支持指定任意维度的数组布局,通过 new 方法可以创建具有指定形状、步长和偏移量的布局;new_contiguous 方法,用于创建连续的数组布局,支持大端序(BigEndian)和小端序(LittleEndian)两种存储顺序;ndim、offset、shape 和 strides 等;index、tile、transpose、merge 和 slice 等,方便对数组布局进行各种变换操作;use ndarray_layout::{ArrayLayout, BroadcastArg};
// 创建一个新的 `ArrayLayout` 实例。
// 形状为 [1, 2, 3],步长为 [12, 4, 1],偏移量为 0。
let layout = ArrayLayout::<3>::new(&[1, 2, 3], &[12, 4, 1], 0);
// 验证初始的形状和步长。
assert_eq!(layout.shape(), &[1, 2, 3]);
assert_eq!(layout.strides(), &[12, 4, 1]);
assert_eq!(layout.offset(), 0);
// 对第 0 维进行广播变换,广播次数为 4。
let broadcasted_layout = layout.broadcast(0, 4);
// 验证广播变换后的形状和步长。
assert_eq!(broadcasted_layout.shape(), &[4, 2, 3]);
assert_eq!(broadcasted_layout.strides(), &[0, 4, 1]);
assert_eq!(broadcasted_layout.offset(), 0);