【问题标题】:Numpy reshape an array with specific orderNumpy 重塑具有特定顺序的数组
【发布时间】:2018-10-24 12:49:39
【问题描述】:

假设我有这个数组 x:

x = array([1, 2, 3, 4, 5, 6, 7, 8])
x.shape = (8,1)

我想重塑它成为

array([[1, 3, 5, 7], 
       [2, 4, 6, 8]])

这是在 x 上的 reshape(2, 4),但以直接的方式:

y = x.reshape(2,4)

y 变成

array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

这不是我想要的。有没有办法以这种特定方式转换数组?

【问题讨论】:

    标签: python arrays numpy reshape


    【解决方案1】:
    In[4]: x.reshape(4, 2).T
    Out[4]: 
    array([[1, 3, 5, 7],
           [2, 4, 6, 8]])
    

    【讨论】:

    • 转置!!真棒.tks
    【解决方案2】:

    最简单的方法是在reshape 函数中指定orderargument。


    你需要 Fortran 命令。

    旁注:Matlab 默认使用 Fortran 顺序,但在 python 中您需要指定。


    使用这个:

    x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
    y = x.reshape(2,4, order='F')
    
    print(y)
    #array([[1, 3, 5, 7],
    #       [2, 4, 6, 8]])
    

    【讨论】:

    • 这很有趣,因为我试图复制我在 Matlab 中得到的一些结果,而在我重塑时无法在 Python 中得到相同的结果。花了很长时间才考虑到顺序不同!
    【解决方案3】:

    另一种选择是使用选项order='F' 进行重塑调用,例如

    res = numpy.reshape(my_array, (2,4), order='F')
    

    https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.reshape.html

    【讨论】:

      【解决方案4】:

      是的,你可以这样做:

      y = np.array([x[0::2], x[1::2]])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-25
        • 2016-10-15
        • 1970-01-01
        • 1970-01-01
        • 2019-06-26
        • 1970-01-01
        相关资源
        最近更新 更多