python - 为什么 numpy.dtype(numpy.float64) 计算结果为 False

标签 python numpy

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

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

特别考虑到:

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

谢谢:)

最佳答案

np.dtype 未定义 __nonzero__,但它定义了 __len__。根据documentation ,这意味着当您在 bool 上下文中使用它时,如果 __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。我想这与维数有关:具有简单数据类型和一维大小的数组本身就是一维的,但是具有复合数据类型和一维大小的数组可以被认为是二维的,无论有多少个元素属于复合数据类型。

关于python - 为什么 numpy.dtype(numpy.float64) 计算结果为 False,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22575699/

相关文章:

python - numpy中列表滑动的矢量化实现

python - 如何在给定条件下选择两个数组的元素?

python - 从 pandas 数据帧转换后修改 numpy 数组

python - 在 Python 中针对复杂向量修改 Gram Schmidt

python - 如何从网站上抓取动态内容?

python - Pytorch:丢失层和打包序列

python - 为封装的 MySQL 提供密码

python - OSX- "NumPy/SciPy requires Python 2.6 to Install"

python - 在 Django 中使用 Form - get() 缺少 1 个必需的位置参数 : 'header'

python - 在 python 3.X 中使用不同长度的列表反转字典