【问题标题】:Reshaping a numpy array in python在python中重塑一个numpy数组
【发布时间】:2011-10-01 10:36:48
【问题描述】:

我有一个 48x365 元素的 numpy 数组,其中每个元素都是一个包含 3 个整数的列表。我希望能够将它变成一个 1x17520 数组,其中所有列表都作为元素保持不变。使用

np.reshape(-1)

似乎将元素分解为三个单独的整数并创建一个 1x52560 数组。所以我要么需要一种重新排列原始数组的新方法,要么需要一种将新 np.reshape 数组(仍然按顺序排列)中的元素分组回 3 个列表的方法。

感谢您的帮助。

【问题讨论】:

    标签: python multidimensional-array numpy reshape


    【解决方案1】:

    你有什么理由不能明确地做到这一点?如:

    >>> a = numpy.arange(17520 * 3).reshape(48, 365, 3)
    >>> a.reshape((17520,3))
    array([[    0,     1,     2],
           [    3,     4,     5],
           [    6,     7,     8],
           ..., 
           [52551, 52552, 52553],
           [52554, 52555, 52556],
           [52557, 52558, 52559]])
    

    您也可以使用-1 来实现,它只需与另一个适当大小的 arg 配对即可。

    >>> a.reshape((17520,-1))
    array([[    0,     1,     2],
           [    3,     4,     5],
           [    6,     7,     8],
           ..., 
           [52551, 52552, 52553],
           [52554, 52555, 52556],
           [52557, 52558, 52559]])
    

    >>> a.reshape((-1,3))
    array([[    0,     1,     2],
           [    3,     4,     5],
           [    6,     7,     8],
           ..., 
           [52551, 52552, 52553],
           [52554, 52555, 52556],
           [52557, 52558, 52559]])
    

    后来我想到你也可以创建一个记录数组——这在某些情况下可能是合适的:

    a = numpy.recarray((17520,), dtype=[('x', int), ('y', int), ('z', int)])
    

    这可以按照您尝试的原始方式重新调整,即reshape(-1)。尽管如此,正如 larsmans 的评论所说,将您的数据视为 3d 数组是最简单的。

    【讨论】:

    • +1。这比将列表保存在 Numpy 数组中要容易得多。
    • 是的。我认为我缺少的是我真的有一个 3 维数组 48x365x3 。我一直假设三个不受影响,但 np 将它们(正确地)视为第三个维度。在 np.reshape(-1,3) 中保留额外的维度可以解决问题。谢谢
    猜你喜欢
    • 1970-01-01
    • 2020-11-26
    • 2017-12-27
    • 2019-05-05
    • 2013-01-06
    • 2017-07-22
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多