为什么numpy.dtype(numpy.float64)计算为False

时间:2014-03-22 09:19:25

标签: python numpy

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

import numpy
if(numpy.dtype(numpy.float64):
    print "Expected"
else:
    print "Surprise!!!!"

特别考虑:

import numpy
if(object):
    print "Expected!"
else:
    print "Surprise"

谢谢:)

1 个答案:

答案 0 :(得分:3)

np.dtype未定义__nonzero__,但确实定义了__len__。根据{{​​3}},这意味着当您在布尔上下文中使用它时,如果__len__返回非零,它将评估为True。但无论你输入什么类型,它总是返回零:

>>> bool(np.dtype(int))
False
>>> bool(np.dtype(float))
False
>>> bool(np.dtype(np.int8))
False

另一方面,复合数据类型确实返回非零值,因此为True:

>>> bool(np.dtype([('foo', int)]))
True

然后你可能会问为什么"长度"当具有单个元素的化合物1的长度为1时,简单dtype的值为零。我认为这是关于维度的东西:具有简单dtype和一维尺寸的数组本身是一维的,但是具有复合dtype和一维尺寸的数组可以被认为是二维的,无论如何化合物dtype中有多少元素。