Python Numpy:如何反转切片操作?

Python Numpy: How to reverse a slice operation?

我想'reverse' 切片操作。例如原数组为:

import numpy as np
a=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])

>>> array([[ 1,  2,  3,  4],
           [ 5,  6,  7,  8],
           [ 9, 10, 11, 12]])

然后,我对这个数组进行切片,并对其进行一些操作(乘以 2):

b = 2 * a[::-1,::2]

>>> array([[18, 22],
           [10, 14],
           [ 2,  6]])

如何将b中的所有元素放回到它们在a中的原始位置(注意轴0被翻转),即最终结果应该是:

>>> array([[ 2,  0,  6,  0],
           [10,  0, 14,  0],
           [18,  0, 22,  0]])

我认为应该使用 as_stridedflip 之类的东西,但我似乎无法让它工作。感谢您的帮助!!

你可以 np.zeros(shape=(3,4)),索引它们,但你需要在这样做之前反转 [::-1]。对于一些可以解决的事情来说,就像在不同的变量下之前保存数组一样简单,这似乎很痛苦,因为无论如何你总是必须保存形状。例如

var1 = beforeArray
var2 = 2 * var1 [::-1,::2]
to_reverse_var2 = np.zeros(var1.shape)
then index

但是只保存 var 会容易得多,因为无论如何你总是需要 array.shape。只用自己。如果是功能问题,则为全局。

其他想法可以在 numpy 之外使用矩阵方法来加速过程,例如。

import numpy as np
a=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
req_array = np.zeros(a.shape)
req_array[::-1,::2] = 2 * a[::-1,::2]
print(req_array) ## your required array