【问题标题】:What does "ValueError: object too deep for desired array" mean and how to fix it?“ValueError:object too deep for desired array”是什么意思以及如何解决?
【发布时间】:2013-04-02 03:08:41
【问题描述】:

我正在尝试这样做:

h = [0.2, 0.2, 0.2, 0.2, 0.2]

Y = np.convolve(Y, h, "same")

Y 看起来像这样:

执行此操作时出现此错误:

ValueError: object too deep for desired array

这是为什么?

我的猜测是因为不知何故 convolve 函数不会将 Y 视为一维数组。

【问题讨论】:

    标签: python numpy convolution valueerror


    【解决方案1】:

    您屏幕截图中的Y 数组不是一维数组,它是一个具有 300 行和 1 列的二维数组,如其 shape(300, 1) 所示。

    要删除额外的维度,您可以将数组切片为Y[:, 0]。一般要将n维数组转换为一维数组,可以使用np.reshape(a, a.size)

    将 2D 数组转换为 1D 的另一个选项是来自 numpy.ndarray 模块的 flatten() 函数,不同之处在于它会复制数组。

    【讨论】:

    • 将该数组转换为一维数组,也可以使用squeeze()
    • 更简单(更准确),而不是 len(a) 使用:a.size
    • @Ari 为什么更准确? size 被记录为返回数组中元素的数量,在我看来这与 len() 返回完全相同。
    • len(a) 仅给出沿一个轴的“长度”。对于多维数组(2D 及以上),最好使用“size”。
    • @Ari 哦,现在我明白你的意思了:size 是跨维度长度的乘积。使用a.size 使配方正确地重塑具有两个以上维度的数组,而使用len 将失败,并出现“新数组的总大小必须保持不变”。感谢您的提示,我现在已经更新了答案。
    【解决方案2】:

    np.convolve() 采用一维数组。您需要检查输入并将其转换为一维。

    您可以使用np.ravel() 将数组转换为一维。

    【讨论】:

      【解决方案3】:

      您可以尝试使用scipy.ndimage.convolve,它允许对多维图像进行卷积。 here 是文档

      【讨论】:

        【解决方案4】:

        np.convolve 需要一个扁平化数组作为它的输入之一,您可以使用 numpy.ndarray.flatten(),它非常快,找到它here

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-22
          • 2020-04-22
          • 2021-06-25
          • 2013-08-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多