是否存在将线性索引转换为支持负步幅的下标列表的算法?
背景
MATLAB、Julia 等环境和 NumPy 等库提供对跨步数组(也称为 ndarray)的支持。跨步数组由线性内存(例如,单个底层缓冲区)支持,这与嵌套数组形成鲜明对比,其中每个嵌套数组对应一个维度。例如,考虑以下 2x2 矩阵
[ 1 2
3 4 ]
Run Code Online (Sandbox Code Playgroud)
作为数组的数组来实现
[ 1 2
3 4 ]
Run Code Online (Sandbox Code Playgroud)
其中(使用从零开始的索引)
A = [ [ 1, 2 ], [ 3, 4 ] ]
Run Code Online (Sandbox Code Playgroud)
我们可以将相同的 2x2 矩阵表示为跨步数组,如下所示(假设行优先)
a01 = A[0][1] = 2
Run Code Online (Sandbox Code Playgroud)
在哪里
A = [ 1, 2,
3, 4 ]
Run Code Online (Sandbox Code Playgroud)
一般来说,对于跨步 NxM 矩阵,(i,j)可以通过以下方式访问元素
a01 = A[ 2*0 + 1*1 ] = 2
Run Code Online (Sandbox Code Playgroud)
其中buffer是底层数据缓冲区,si和分别对应于沿和维度sj的步幅。假设一个行主跨步数组,对于上面的 2x2 矩阵,并且(省略元素字节长度)。ijsi = 2 …