如何就地反转NumPy数组?

时间:2017-04-01 00:03:17

标签: python arrays numpy reverse

有没有有效的方法来撤销NumPy 就地

注意:我正在寻找颠倒的视图。我希望阵列能够真正逆转。

2 个答案:

答案 0 :(得分:0)

它不优雅,但如果就地是最重要的因素而且运行时不那么重要(因为numpy切片远远超过迭代方法),你总是可以从左右交换索引数组的末尾直到指数收敛:

def reverse(arr):
    ln = arr.shape[0]
    lidx, ridx = 0, ln - 1

    while lidx < ridx:
        rtmp = arr[ridx]
        arr[ridx] = arr[lidx]
        arr[lidx] = rtmp
        lidx += 1
        ridx -= 1

    return arr

这适用于奇数和偶数长度的数组。甚至:

>>> reverse(np.arange(4))
array([3, 2, 1, 0])

奇:

>>> reverse(np.arange(5))
array([4, 3, 2, 1, 0])

并证明它就位:

>>> y = np.arange(6)
>>> x = reverse(y)
>>> x is y
True

答案 1 :(得分:-1)

正如评论中已经提到的那样,这似乎可行。

A = np.array([2,1,3])
B = A.copy()
B = B[...,::-1]