Python 如何在适当的位置反转NumPy阵列?

Python 如何在适当的位置反转NumPy阵列?,python,arrays,numpy,reverse,Python,Arrays,Numpy,Reverse,有没有什么有效的方法可以在适当的位置反转NumPy 注意:我不是在寻找相反的视图。我希望数组能够真正反转。这是不雅观的,但如果就地是最重要的因素,而运行时间则不那么重要(因为numpy切片将远远超过迭代方法),则始终可以从数组的左端和右端交换索引,直到索引收敛: def reverse(arr): ln = arr.shape[0] lidx, ridx = 0, ln - 1 while lidx < ridx: rtmp = arr[ridx]

有没有什么有效的方法可以在适当的位置反转NumPy


注意:我不是在寻找相反的视图。我希望数组能够真正反转。这是不雅观的,但如果就地是最重要的因素,而运行时间则不那么重要(因为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
奇数:

为了证明它的存在:

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

正如已经在评论中指出的那样,这似乎是可行的

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

我的猜测是,将反向视图复制回自身是您能做的最好的事情:
arr[:]=arr[::-1]
。换句话说,必须重写数据缓冲区。即使这样,您也可能会遇到缓冲问题
arr[:]=arr[:-1].copy()
可能更安全。@hpaulj:这也是我的猜测……为什么反向视图对你不好?@Julien:
a=numpy.asarray([1,2,3])
print(numpy.add(a[:-1],1,a))
@Mehrdad:,
numpy.add(a[:-1],1,a)
中的别名应该不再是问题。(我相信这是通过创建一个副本来实现的。)这并没有在适当的位置反转阵列,而这正是OP明确要求的。它所做的只是复制到一个新数组,对该数组进行反向查看,然后用反向视图替换副本。谢谢大家的提醒。我的帖子应该有一个学生驾驶警告。你能进一步说明两者的实际区别吗?i、 在什么情况下,你想要一个而不是另一个?通常,制作新的副本并重新绑定名称是可以的。但有时您会引用一个别名对象(在接收参数时最常见;绑定到参数名称的局部变量通常也绑定到调用方作用域中的名称)。在这些情况下,重新分配不会影响调用者;通常你想要(没有意外的副作用),有时你不想要。在这种情况下,OP显然希望在适当的位置进行操作,因此,在适当的位置重写原始对象非常重要。
>>> y = np.arange(6)
>>> x = reverse(y)
>>> x is y
True
A = np.array([2,1,3])
B = A.copy()
B = B[...,::-1]