【问题标题】:Slice array, but overlapped interval in Python切片数组,但Python中的重叠区间
【发布时间】:2019-07-20 07:19:21
【问题描述】:

我的数据中有 3D 数组。我只想用 Python 中的重叠间隔将 3D 数组 2 x 2 x 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,我可以对数组进行切片,但不会重叠。请给我一些有用的提示。

【问题讨论】:

  • a = [1, 2, 3, 4; 5, 6, 7, 8] 是无效的 Python 语法。

标签: python arrays python-3.x slice


【解决方案1】:

你应该看看numpy.ndarray.stridesnumpy.lib.stride_tricks

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

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

另见 numpy documentation

按照使用步幅的 2D 示例:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 2012-11-10
    • 2013-05-20
    相关资源
    最近更新 更多