ValueError: объект слишком глубокий для нужного массива в функции np.digitize - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь выполнить квантование изображения с помощью функции 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

Редактировать: я также пытался создать бин с 1d массивом, но он не сработал

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)) на самом деле является двумерным массивом, что вызвало проблему.

1 Ответ

0 голосов
/ 30 октября 2018

Учитывая, что вы используете np.digitize Я бы посоветовал вам проверить версию numpy, как в документах, где говорится о входном значении:

Входной массив для биннинга. До NumPy 1.10.0 этот массив должен был 1-мерный, но теперь может иметь любую форму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...