【问题标题】:I can't change the shape of the numpy array我无法更改 numpy 数组的形状
【发布时间】:2020-12-16 08:50:10
【问题描述】:

我无法改变 numpy 数组的形状

dataset[i].shape   # (1134, )
dataset[i] = dataset[i].reshape((18, 63))

ValueError: could not broadcast input array from shape (18,63) into shape (1134)

【问题讨论】:

  • 重塑工作;问题是您不能将矩阵的一行设置为重新整形的 numpy 数组(这是您尝试使用 dataset[i] = ... 做的事情)。

标签: python numpy reshape


【解决方案1】:

我不知道您的初衷是什么,但您的代码试图在 LHS 上的数组和 RHS 上的数组之间进行逐个元素的赋值。

LHS 上的数组是dataset[i],其形状为(1134,)

由于(成功)reshape(),RHS 上的数组形状为 (18,63)

在这种逐元素分配中,要么 LHS 数组和 RHS 数组需要具有相同的形状,要么 RHS 数组应该可以广播成 LHS 数组的形状。碰巧,通过rules of broadcasting,形状(18,63) 无法广播成形状(1163,)。这就是错误消息背后的原因。

您问题的标题是“我无法更改 numpy 数组的形状”,但这不是您的代码试图做的。

如果出于某种原因,您认为可以更改 dataset[i] 的形状,而不是更改 dataset 的形状,并且如果这是您代码背后的初衷,那是不可能的 - 您不能更改数组切片的形状。

即使您执行dataset.reshape(-1, 18, 63),也不会改变dataset “就地” 的形状。相反,dataset.reshape(-1, 18,63) 将返回一个具有指定形状的新 numpy 数组,它恰好是dataset视图(它使用dataset 的基础数据)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 2021-10-12
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多