#layout #transformation #multi-dimensional-array

ndarray-layout

This crate provides definitions and transformations for multi-dimensional array data layouts

6 releases

Uses new Rust 2024

new 0.2.2 Apr 29, 2025
0.2.1 Mar 28, 2025
0.2.0 Feb 23, 2025
0.1.1 Feb 15, 2025
0.0.1 Dec 26, 2024

#368 in Data structures

Download history 18/week @ 2025-01-07 30/week @ 2025-01-14 38/week @ 2025-01-21 15/week @ 2025-01-28 186/week @ 2025-02-04 319/week @ 2025-02-11 186/week @ 2025-02-18 59/week @ 2025-02-25 37/week @ 2025-03-04 64/week @ 2025-03-11 3/week @ 2025-03-18 121/week @ 2025-03-25 27/week @ 2025-04-01 31/week @ 2025-04-08 25/week @ 2025-04-15 19/week @ 2025-04-22

110 downloads per month
Used in 2 crates (via mem-rearrange)

MIT license

48KB
995 lines

ndarray-layout

CI Latest version Documentation license codecov GitHub repo size GitHub code size in bytes

GitHub Issues GitHub Pull Requests GitHub contributors GitHub commit activity

ndarray-layout 是一个用于处理多维数组布局的 crate,它提供了 ArrayLayout 结构体,用于高效管理和操作多维数组的元信息,如形状、步长和偏移量等。这个库在处理多维数组时,提供了灵活且高效的布局管理方式,能够满足不同场景下对数组布局的操作需求。

主要功能特点

多维数组布局管理

  • ArrayLayout 结构体支持指定任意维度的数组布局,通过 new 方法可以创建具有指定形状、步长和偏移量的布局;
  • 提供 new_contiguous 方法,用于创建连续的数组布局,支持大端序(BigEndian)和小端序(LittleEndian)两种存储顺序;

元信息访问

  • 提供便捷的方法来访问数组布局的元信息,如 ndimoffsetshapestrides 等;
  • 支持计算数组元素的偏移量和数据范围,方便进行内存访问和数据处理;

布局操作功能

  • 提供多种布局变换方法,如 indextiletransposemergeslice 等,方便对数组布局进行各种变换操作;

使用示例

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);

No runtime deps