python - 切片数组,但 Python 中重叠间隔

标签 python arrays python-3.x slice

我的数据中有 3D 数组。我只想在 Python 中以重叠间隔对 3D 数组进行 2 × 2 × 2 的切片。

这是 2D 的示例。

a = [1, 2, 3, 4;
     5, 6, 7, 8]

此外,这也是我将数组切成 2 x 2 后所期望的结果。

[1, 2;  [2, 3;  [3, 4;
 5, 6]   6, 7]   7, 8]

在 3D 中,

  [[[1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]],

   [[1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]],

   [[1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]]]

像这样,(也许不完全是..)

 [1, 2   [2, 3
  4, 5]   5, 6]       ...
 [1, 2   [2, 3
  4, 5]   5, 6] 

我认为,通过使用 np.split,我可以对数组进行切片,但不会重叠。请给我一些有用的提示。

最佳答案

You should have a look at numpy.ndarray.strides and numpy.lib.stride_tricks

遍历数组时在每个维度中步进的字节元组。 数组 a 中元素 (i[0], i[1], ..., i[n]) 的字节偏移量为:

offset = sum(np.array(i) * a.strides)

另请参阅 numpy documentation

Following a 2D example using strides:

x = np.arange(20).reshape([4, 5])
>>> x
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])

>>> from numpy.lib import stride_tricks
>>> stride_tricks.as_strided(x, shape=(3, 2, 5),
                                strides=(20, 20, 4))
...
array([[[  0,  1,  2,  3,  4],
        [  5,  6,  7,  8,  9]],

       [[  5,  6,  7,  8,  9],
        [ 10, 11, 12, 13, 14]],

       [[ 10, 11, 12, 13, 14],
        [ 15, 16, 17, 18, 19]]])

另请参阅此 question在 Stackoverflow 上(此示例来自此处),以加深您的理解。

关于python - 切片数组,但 Python 中重叠间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54890736/

相关文章:

python - .decompose() 后标签未删除

Python:将 float 字符串解包为复数

python - 将 numpy 数组追加到元素中

python - 如何修复空的 tensorflow 安装?

PHP计算多维数组中的项目

c++ - 在 C++ 中声明静态/动态数组是否会自动调用每个元素的默认构造函数?

python - 如何修复 "update-alternatives: warning: forcing reinstallation of alternative/usr/bin/python3.8 because link group python3 is broken"?

python - 具有多个条件的列表理解(python)

python - 将一组区间简化为最简单的表示

python - 我应该怎么称呼这个函数组合?