所以,我遇到了一个奇怪的问题:判断一个集合(set)是否包含一个Numpy数据类型对象与判断一个元组(tuple)是否包含该对象会得到不同的结果:
In [1]: x = np.zeros(8)
In [2]: x.dtype
Out[2]: dtype('float64')
In [3]: x.dtype in (np.float32, np.float64)
Out[3]: True
In [4]: x.dtype in {np.float32, np.float64}
Out[4]: False
为什么会发生这种情况?是什么阻止
set().__contains__()
在查看numpy.dtype
对象时返回True
?
x.dtype in {np.float32, np.float64, np.dtype('float64')}
这个起作用了.. 但我也想知道为什么会这样.. - sharathnatrajset
使用的是is
测试,而元组(或列表)使用了更宽松的==
测试。float64
实际上是一个函数(类型为type
)。np.dtype('float64')
是一个dtype
对象。 - hpauljx = 1.0
,print(type(x) in {npa.float32, np.float64})
print(isinstance(1.0, (np.float64,np.float32)))
返回 False 然而,print(type(x) in {float, np.float32, np.float64})
print(isinstance(1.0, (float, np.float32, np.float64)))
返回 True。 - sharathnatrajdtype
,而不是Pythonfloat
的type
。 - hpaulj