Numpy: np.finfo не терпит неудачу, как и следовало ожидать - PullRequest
0 голосов
/ 12 октября 2019

Я использую numpy.iinfo и np.finfo, чтобы проверить, соответствует ли данный тип или значение целому числу или числу с плавающей точкой. При работе с Нет .

происходит странное поведение. Как и ожидалось, происходит следующее:

 np.iinfo(None)

Тем не менее

 np.finfo(None)

не, как я и ожидал. Это ошибка? ИМХО, когда type (None) возвращает NoneType, тогда np.finfo должен завершиться сбоем, как это делает np.iinfo.

1 Ответ

2 голосов
/ 12 октября 2019

На чисто техническом уровне мы можем объяснить то, что вы видите, взглянув на источник

Соответствующий фрагмент будет

@set_module('numpy')
class finfo(object):

<--snip-->   

    def __new__(cls, dtype):
        try:
            dtype = numeric.dtype(dtype)
        except TypeError:
            # In case a float instance was given
            dtype = numeric.dtype(type(dtype))

Поведение, которое вы видитеявляется следствием np.dtype(None) оценки до dtype('float64'), что само по себе не кажется мне на 100% естественным. Другие (включая разработчиков), похоже, согласны . Например,

О, хорошо, мы могли бы отказаться от dtype (None), который кажется довольно бесполезным, но я не знаю, стоит ли это беспокоить ...

Исходя из этого обсуждения и приведенного выше кода, способ обработки None действительно выглядит немного непреднамеренно, но это только мое обоснованное предположение.

...