【问题标题】:Quick way to get strided reverse of NumPy array快速获得 NumPy 数组反向的方法
【发布时间】:2015-09-29 01:35:35
【问题描述】:

我有一个应用程序,我需要根据某个步幅沿 NumPy 数组的一个轴反转元素。例如,假设我有以下数组

In [1]: import numpy as np

In [2]: a = np.array([[1,2],[3,4],[5,6],[7,8]])

In [3]: a
Out[3]: 
array([[1, 2],
       [3, 4],
       [5, 6],
       [7, 8]])

我想沿第一个轴 (axis=0) 反转这个数组,步长为 2。换句话说,我想快速得到以下数组:

Out[4]: 
array([[3, 4],
       [1, 2],
       [7, 8],
       [5, 6]])

有没有一种使用内置 NumPy 例程的快速方法?

【问题讨论】:

  • "...根据一些步幅沿一个轴反转元素。"问题有多普遍?示例(沿第一轴反转对)是您唯一感兴趣的案例吗?
  • 它实际上比我在描述中提到的要笼统得多。在大多数情况下,我只需要能够沿 n 维数组的第一个轴进行反转,但步幅是任意的(在这种情况下,我将其简化为 2)。

标签: python arrays numpy stride


【解决方案1】:

重塑为 3d 数组;反转一维;返回二维:

In [51]: a = np.array([[1,2],[3,4],[5,6],[7,8]])
In [52]: a
Out[52]: 
array([[1, 2],
       [3, 4],
       [5, 6],
       [7, 8]])
In [53]: a.reshape(2,2,2)
Out[53]: 
array([[[1, 2],
        [3, 4]],

       [[5, 6],
        [7, 8]]])
In [54]: a.reshape(2,2,2)[:,::-1,:]
Out[54]: 
array([[[3, 4],
        [1, 2]],

       [[7, 8],
        [5, 6]]])
In [55]: a.reshape(2,2,2)[:,::-1,:].reshape(4,2)
Out[55]: 
array([[3, 4],
       [1, 2],
       [7, 8],
       [5, 6]])

【讨论】:

    猜你喜欢
    • 2019-01-20
    • 1970-01-01
    • 2015-08-03
    • 2016-08-12
    • 2017-10-30
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多