首页 > 解决方案 > Numpy:np.finfo 不会像预期的那样失败

问题描述

我正在使用 numpy.iinfo 和 np.finfo 来测试给定类型或值是否对应于整数或浮点数。处理None时有一种奇怪的行为。

正如预期的那样,以下失败:

 np.iinfo(None)

尽管如此

 np.finfo(None)

没有,正如我所料。那是一个错误吗?恕我直言,当 type(None) 返回 NoneType 时,np.finfo 应该像 np.iinfo 一样失败。

标签: pythonnumpyfloating-point

解决方案


在纯粹的技术层面上,我们可以通过查看源代码来解释您所看到的

相关的片段将是

@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)评估 to的结果dtype('float64'),这对我来说本身并不是 100% 自然的。其他人(包括开发人员)似乎同意。例如

哦,好吧,我们可能会弃用 dtype(None),这似乎没什么用,但我不知道这是否值得费心......

基于这个讨论和上面的代码,None处理方式确实看起来有点意外,但这只是我有根据的猜测。


推荐阅读