小编kgr*_*yte的帖子

如何将线性索引转换为支持负步幅的下标

是否存在将线性索引转换为支持负步幅的下标列表的算法?

背景

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 …

arrays algorithm math numpy multidimensional-array

5
推荐指数
1
解决办法
3421
查看次数

标签 统计

algorithm ×1

arrays ×1

math ×1

multidimensional-array ×1

numpy ×1