【问题标题】:Python Numpy: How to reverse a slice operation?Python Numpy:如何反转切片操作?
【发布时间】:2021-09-25 08:35:52
【问题描述】:

我想“反转”切片操作。比如原来的数组是:

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 之类的东西,但我似乎无法让它工作。感谢您的帮助!

【问题讨论】:

  • 我打算在反向传播中使用它,所以梯度应该是0

标签: python numpy slice


【解决方案1】:
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

【讨论】:

  • 对...我想多了。谢谢!
【解决方案2】:

您可以只使用 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 之外的矩阵方法来加快处理速度,例如。

【讨论】:

    猜你喜欢
    • 2015-07-05
    • 2017-09-19
    • 2011-02-21
    • 2012-10-18
    • 2018-02-18
    • 2020-12-11
    • 2011-08-30
    • 2016-03-09
    • 1970-01-01
    相关资源
    最近更新 更多