python - 为什么 numpy.dtype ('float64' ) 特别?

标签 python numpy

有人可以解释以下脚本输出背后的逻辑吗?

import numpy
if(numpy.dtype(numpy.float64) == None):
    print "Surprise!!!!"

谢谢:)

最佳答案

看起来像一个不幸的事故:有人决定 dtype(None) 将“默认”为 float (尽管 dtype() 是一个错误)。然后其他人编写了 dtype.__eq__ 以便在比较之前将其第二个参数转换为 dtype。所以 dtype(float) == Nonedtype(float) == dtype(None) 这是真的。

您可以在此处查看源代码中的注释:descriptor.c#L1217

  • Get typenum from an object -- None goes to NPY_DEFAULT_TYPE

当然 NPY_DEFAULT_TYPE 是 float 的(至少通常是这样)。

至于__eq__操作符,在这里:descriptor.c#L3317 .它执行我概述的操作:

if (!PyArray_DescrCheck(other)) {
    if (PyArray_DescrConverter(other, &new) == NPY_FAIL) {
        return NULL;
    }
}

所以这是从 == 右侧的任何内容到 dtype 对象的转换,通过前面提到的转换器函数,将 None 转换为 dtype( float )

编辑:我发现这很有趣而且看起来像是个意外,所以我创建了一个补丁并提交给维护者:https://github.com/numpy/numpy/pull/4532 .

关于python - 为什么 numpy.dtype ('float64' ) 特别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22575050/

相关文章:

python - 绘制文档 tfidf 二维图

Python解析日志文件实时提取事件

python - PyArray_New 或 PyArray_SimpleNewFromData 指定 3D 数组的维度

python - Django:命名 Url/相同的正则表达式,不同的名称

python - 通过 `re.split` 直接(在 Python 中)分隔每两个相邻不同数字之间的字符串?

python - 绘制人口稀少的二维 numpy 数组

python - 缩放 float 列表的最快方法

python - __contains__ 如何为 ndarrays 工作?

python - 代码优化python

java - 如何在Ubuntu中正确安装Stanford Parser? (没有nltk)