【问题标题】:ValueError: cannot reshape array of size 7267 into shape (302,24,1)ValueError:无法将大小为 7267 的数组重新整形为形状 (302,24,1)
【发布时间】:2020-07-14 20:51:50
【问题描述】:

我正在使用以下方法将 1D 数组重塑为 3D。它工作正常,但是当x 为 7267 时会引发错误。我知道不可能在不丢失一些值的情况下将奇数切片为 int。希望有任何解决方案。

代码

x = 7248
y= 24

A = np.arange(x)
A.reshape(int(x/y),y,1).transpose()

输出

array([[[   0,   24,   48, ..., 7176, 7200, 7224],
        [   1,   25,   49, ..., 7177, 7201, 7225],
        [   2,   26,   50, ..., 7178, 7202, 7226],
        ...,
        [  21,   45,   69, ..., 7197, 7221, 7245],
        [  22,   46,   70, ..., 7198, 7222, 7246],
        [  23,   47,   71, ..., 7199, 7223, 7247]]])

【问题讨论】:

    标签: python arrays reshape


    【解决方案1】:

    当然,关键是要以这种方式重塑A,必须是len(A) % y == 0。您如何执行此操作取决于您希望如何处理额外的值。

    如果您可以丢弃一些值以对数组进行整形,那么您可以简单地截断A,以便len(A) % y == 0

    例如

    x = 7267
    y = 24
    
    A = np.arange(x - x % y)
    A.reshape(x // y, y, 1).transpose()
    

    您也可以使用切片截断数组。

    例如

    x = 7267
    y = 24
    
    A = np.arange(x)
    
    A[:x - x % y].reshape(x // y, y, 1).transpose()
    

    在必须保留所有数据的情况下,您可以填充 A 用零(或其他值),以便len(A) % y == 0

    例如

    x = 7267
    y = 24
    
    A = np.arange(x)
    A = np.pad(A, (0, y - x % y), 'constant')
    A = A.reshape(A.shape[0] // y, y, 1).transpose()
    

    【讨论】:

    • 谢谢。但是截断会删除那里的 20 个值。我正在寻找一种不会丢失数据的解决方案。
    • @ferrel 然后您需要将数据填充到 y 的下一个倍数
    • 谢谢@L.Grozninger。该解决方案非常清楚。
    猜你喜欢
    • 1970-01-01
    • 2022-10-01
    • 1970-01-01
    • 2021-08-02
    • 2021-03-20
    • 2021-03-21
    • 2018-10-22
    • 2019-11-29
    相关资源
    最近更新 更多