【问题标题】:Numpy reshaping with a custom ordering使用自定义排序进行 Numpy 重塑
【发布时间】:2020-12-28 19:42:58
【问题描述】:

有没有办法对不是“C”或“F”的重塑函数进行自定义订单?

我想通过首先更改第二个索引,然后更改第三个索引,最后更改第一个索引来获取一个平面数组并使其成为 3 维数组?

比如

a = np.arange(12).reshape((2, 2, 3), (2, 3, 1)) # Second parameter not real numpy

导致:

a[:,:,0] = [[0, 1], [6, 7]]
a[:,:,1] = [[2, 3], [8, 9]]
a[:,:,2] = [[4, 5], [10, 11]]

这似乎是很普通的功能,但我似乎无法找到一种方法来做到这一点,除非我自己在循环中手动重塑它,这是不可取的。

感谢您的帮助!

【问题讨论】:

    标签: python numpy reshape numpy-slicing


    【解决方案1】:

    首先,您制作了什么?

    In [127]: a = np.zeros((2,2,2),int)
    In [128]: a = np.zeros((2,2,3),int)
    In [129]: a[:,:,0] = [[0, 1], [6, 7]]
         ...: a[:,:,1] = [[2, 3], [8, 9]]
         ...: a[:,:,2] = [[4, 5], [10, 11]]
    In [130]: a
    Out[130]: 
    array([[[ 0,  2,  4],
            [ 1,  3,  5]],
    
           [[ 6,  8, 10],
            [ 7,  9, 11]]])
    

    现在让我们尝试倒退:

    简单的重塑没有帮助:

    In [131]: a.reshape(2,6)
    Out[131]: 
    array([[ 0,  2,  4,  1,  3,  5],
           [ 6,  8, 10,  7,  9, 11]])
    

    但转置最后两个轴:

    In [132]: a.transpose(0,2,1)
    Out[132]: 
    array([[[ 0,  1],
            [ 2,  3],
            [ 4,  5]],
    
           [[ 6,  7],
            [ 8,  9],
            [10, 11]]])
    In [133]: a.transpose(0,2,1).reshape(2,6)
    Out[133]: 
    array([[ 0,  1,  2,  3,  4,  5],
           [ 6,  7,  8,  9, 10, 11]])
    

    所以在前进的方向上:

    In [135]: np.arange(12).reshape(2,3,2).transpose(0,2,1)
    Out[135]: 
    array([[[ 0,  2,  4],
            [ 1,  3,  5]],
    
           [[ 6,  8, 10],
            [ 7,  9, 11]]])
    

    【讨论】:

    • 虽然这个问题叫 np.transpose(),但我觉得发布寻找解决方案的过程的想法很有趣
    猜你喜欢
    • 1970-01-01
    • 2018-01-29
    • 2010-11-29
    • 2014-06-10
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    相关资源
    最近更新 更多