NumPy数据类型比较

法伦索斯

我正在比较两个不同数组的数据类型,以选择一种适合将两者结合的数据。我很高兴发现自己可以执行比较操作,但是在此过程中发现了以下奇怪的行为:

In [1]: numpy.int16 > numpy.float32
Out[1]: True

In [2]: numpy.dtype('int16') > numpy.dtype('float32')
Out[2]: False

谁能解释这是怎么回事?这是NumPy 1.8.2。

亚历克斯·赖利

第一个比较是没有意义的,第二个有意义的。

随着numpy.int16 > numpy.float32我们比较两个type对象:

>>> type(numpy.int16)
type
>>> numpy.int16 > numpy.float32 # I'm using Python 3
TypeError: unorderable types: type() > type()

在Python 3中,由于没有type实例的定义顺序,因此该比较立即失败在Python 2中,返回了一个布尔值,但不能依靠它来保持一致性(它返回比较内存地址或其他实现级别的东西)。

第二个比较在Python 3中确实有效,并且一致地工作(在Python 2中相同)。这是因为我们现在正在比较dtype实例:

>>> type(numpy.dtype('int16'))
numpy.dtype
>>> numpy.dtype('int16') > numpy.dtype('float32')
False
>>> numpy.dtype('int32') < numpy.dtype('|S10')
False
>>> numpy.dtype('int32') < numpy.dtype('|S11')
True

此命令背后的逻辑是什么?

dtype根据是否可以(安全地)将实例强制转换为另一实例来对实例进行排序。如果可以安全地强制转换为该类型,则该类型将小于另一类型。

对于比较运算符的实现,请查看descriptor.c特别是在arraydescr_richcompare功能上。

这是<操作员映射到的内容:

switch (cmp_op) {
 case Py_LT:
        if (!PyArray_EquivTypes(self, new) && PyArray_CanCastTo(self, new)) {
            result = Py_True;
        }
        else {
            result = Py_False;
        }
        break;

本质上,NumPy仅检查两种类型(i)不相等,以及(ii)第一种类型可以转换为第二种类型。

此功能在NumPy API中也显示为np.can_cast

>>> np.can_cast('int32', '|S10')
False
>>> np.can_cast('int32', '|S11')
True

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

NumPy loadtxt数据类型

来自分类Dev

比较If语句中的数据类型

来自分类Dev

如何比较sympy数据类型

来自分类Dev

比较相似的数据类型无效?

来自分类Dev

比较If语句中的数据类型

来自分类Dev

比较不同数据类型的问题

来自分类Dev

在argparse中使用numpy数据类型

来自分类Dev

|,>和<在numpy数据类型中

来自分类Dev

numpy数据类型导致数组重复

来自分类Dev

numpy数据类型有问题?

来自分类Dev

从Cython结构创建numpy数据类型

来自分类Dev

具有不同数据类型的 Numpy

来自分类Dev

在Oracle中将长数据类型与varchar数据进行比较

来自分类Dev

如何将列的数据类型与给定的数据类型进行比较

来自分类Dev

比较vtk数据类型和基本数据类型

来自分类Dev

如何比较记录是否存在与json数据类型字段?

来自分类Dev

在Haskell中比较各种数据类型

来自分类Dev

如何仅从DateTime数据类型比较时和分

来自分类Dev

如何比较可能是Rational或Float的数据类型

来自分类Dev

比较和分配数据类型的困难

来自分类Dev

多数据类型pandas Dataframe中的比较操作

来自分类Dev

比较简单的Python ctypes数据类型

来自分类Dev

将变量与不同数据类型的多列进行比较?

来自分类Dev

text,ntext和image数据类型无法比较或排序

来自分类Dev

您如何只比较数据类型中的某些位?

来自分类Dev

Microsoft Access和MYSQL数据类型比较

来自分类Dev

Java接口比较各种数据类型

来自分类Dev

比较和分配数据类型的困难

来自分类Dev

在 Matlab 中使用 find() 比较不同的数据类型