有没有一种有效的方法来反转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
这将适用于长度为奇数和偶数的数组。 偶数:
>>> 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
正如评论中已经指出的那样,这似乎是有效的。
A = np.array([2,1,3])
B = A.copy()
B = B[...,::-1]
arr[:]=arr[::-1]
。换句话说,数据缓存必须被重写。即使这样做,你可能也会遇到缓存问题。arr[:]=arr[::-1].copy()
可能更安全一些。 - hpaulja = numpy.asarray([1, 2, 3]);
print(numpy.add(a[::-1], 1, a))
- user541686numpy.add(a[::-1], 1, a)
中的别名问题不再是一个问题。(我相信这是通过创建副本来实现的。) - user2357112