numpy.digitize возвращает значения вне диапазона? - PullRequest
3 голосов
/ 04 декабря 2010

Я использую следующий код для оцифровки массива в 16 бинов:

numpy.digitize(array, bins=numpy.histogram(array, bins=16)[1])

Я ожидаю, что выходной сигнал находится в диапазоне [1, 16], поскольку имеется 16 бинов.Однако одно из значений в возвращаемом массиве равно 17. Как это можно объяснить?

Ответы [ 3 ]

6 голосов
/ 04 декабря 2010

Это фактически задокументированное поведение numpy.digitize():

Каждый возвращаемый индекс i таков, что bins[i-1] <= x < bins[i], если bins монотонно увеличивается, или bins[i-1] > x >= bins[i], если binsмонотонно уменьшается.Если значения в x выходят за пределы bins, 0 или len(bins) возвращается в зависимости от ситуации.

Так что в вашем случае 0 и 17 такжедопустимые возвращаемые значения (обратите внимание, что массив bin, возвращаемый numpy.histogram(), имеет длину 17).Контейнеры, возвращаемые numpy.histogram(), охватывают диапазон от array.min() до array.max().Условие, данное в документации, показывает, что array.min() относится к первому бин-коду, а array.max() лежит вне последнего бина - поэтому 0 не выводится, а 17 - *. 1027 *

2 голосов
/ 04 декабря 2010

numpy.histogram() создает массив бина ребер , из которых есть (number of bins)+1.

1 голос
/ 11 октября 2014

В numpy версии 1.8. У вас есть возможность выбрать, хотите ли вы, чтобы numpy.digitize считал интервал закрытым или открытым.Ниже приведен пример (скопировано из http://docs.scipy.org/doc/numpy/reference/generated/numpy.digitize.html)

x = np.array ([1.2, 10.0, 12.4, 15.5, 20.])

bins = np.array ([0,5,10,15,20])

np.digitize (x, bins, right = True )

array ([1, 2, 3, 4,4])

...