【问题标题】:ValueError: object too deep for desired array In np.digitize functionValueError:对象对于所需数组来说太深在 np.digitize 函数中
【发布时间】:2019-04-03 08:27:12
【问题描述】:

我正在尝试使用 np.digitize 函数进行图像量化,但不断收到“太深”错误。
根据文档,支持 2d 和 1d 数组,但没有一个对我有用。 将 numpy 导入为 np 将 matplotlib.pyplot 导入为 plt 将 matplotlib.image 导入为 mpimg

def rgb2gray(rgb):
    return np.dot(rgb[...,:3], [0.299, 0.587, 0.114])

def quant_img(img, N):
    bins = np.array([range(0,N)])
    inds = np.digitize(img, bins)
    return inds

img = mpimg.imread("img.jpg")     
gray = rgb2gray(img)
gray_qaunt = quant_img(gray,10)

错误是

ValueError                                Traceback (most recent call last)
<ipython-input-30-f751f38c519e> in <module>()
     17 gray = rgb2gray(img)
---> 18 gray_qaunt = quant_img(gray,10)


<ipython-input-30-f751f38c519e> in quant_img(img, N)
---> 13     inds = np.digitize(img, bins)
     14     return inds


ValueError: object too deep for desired array

编辑:我也尝试过使用一维数组进行装箱,但效果不佳

def quant_img(img, N):
    bins = np.array([range(0,N)])
    img = np.array(img.flatten())
    inds = np.digitize(img, bins)
    return inds

编辑:感谢@Warren Weckesser,我注意到np.array(range(0,X)) 实际上是一个二维数组,这是导致问题的原因。

【问题讨论】:

  • 调试提示:如果一个函数莫名其妙地产生错误,请检查传递给函数的所有参数是否正确。在这种情况下,请仔细查看 bins 参数。 digitize 的文档字符串说 bins 必须是一维且单调的。是吗?例如,检查bins.shape

标签: python numpy


【解决方案1】:

鉴于您使用的是 np.digitize,我建议您检查 numpy 版本,因为它在有关输入值的文档中说明了这一点:

要分箱的输入数组。在 NumPy 1.10.0 之前,这个数组必须是 一维,但现在可以有任何形状。

【讨论】:

  • 正如我所提到的,它不适用于一维数组和二维数组,我已经用不能正常工作的一维数组更新了这个问题
猜你喜欢
  • 2017-01-21
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
  • 2018-07-17
  • 2019-01-02
  • 2019-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多