gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:49:51 26 4
gpt4 key购买 nike

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com