【问题标题】:How to transpose axes back after .transpose?如何在.transpose之后将轴转回?
【发布时间】:2021-08-28 11:26:12
【问题描述】:

我想知道如何撤消我的转置操作。让我在例子中更具体一点:

a = np.random.rand(25,32,11) 
b = a.transpose(2,0,1)
c = b.transpose(??) ### Here I should set (1,0,2) 
# c == a

我应该在最后一个转置中设置哪些值以使 c == a ?我猜在 numpy 中没有像“transpose_undo”这样的方法。 作为一种解决方案,我们可以依赖阵列的实际形状,但将来我们可以拥有 25x25x25 的阵列......

【问题讨论】:

    标签: python arrays numpy transpose


    【解决方案1】:

    使用转置,只需按照顺序即可。您的第一个排列映射维度为:

    0th transformed is 2nd original
    1st transformed is 0th original
    2nd transformed is 1st original
    -------------------
    0th original is 1st transformed
    1st original is 2nd transformed
    2nd original is 0th transformed
    
    a = np.random.rand(25,32,11) 
    b = a.transpose(2,0,1)
    np.all(a == b.transpose(1, 2, 0))
    

    收益true

    编辑:

    如果你想自动化逆排列,你可以使用np.argsort

    axes = [2, 0, 1]
    b = a.transpose(*axes)
    np.all(a == b.transpose(*np.argsort(axes))  # yields true
    

    【讨论】:

    • 正确,但如何自动计算第一次转置的值 (1,2,0)?
    • 在我想到的两个解决方案中进行了编辑
    • 遇到了这种方法不起作用的情况:如果我们转置 (2,1,0) 我们然后转回为 (0,1,2) 出了什么问题......可能是这样case 就像一个异常,可以使用 if 语句手动处理...我不知道...
    • 哇看起来它从根本上是错误的,它是偶然起作用的......使用np.argsort 看起来是正确的,如果你没有疯狂的维度,你不会注意到任何性能缺点
    猜你喜欢
    • 2015-11-09
    • 1970-01-01
    • 2021-12-24
    • 2023-03-18
    • 2023-03-29
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    相关资源
    最近更新 更多