Python Numpy'的平等语义;s数据类型和别名

Python Numpy'的平等语义;s数据类型和别名,python,python-3.x,numpy,Python,Python 3.x,Numpy,我正在做一些HDF写/读,需要解释一些数据类型问题,这些问题在这里并不完全相关。其缺点是我在HDF文件中使用sentinel值表示None,但这些sentinel是特定于数据类型的(以避免替换/写入时数组数据类型出现numpy问题) 无论如何,我有一个类似的口述: __sentinels = { np.float64: np.nan, np.uint16: np.iinfo(np.int16).min, np.uint32: np.iinfo(np.int32).min, ...

我正在做一些HDF写/读,需要解释一些数据类型问题,这些问题在这里并不完全相关。其缺点是我在HDF文件中使用sentinel值表示
None
,但这些sentinel是特定于数据类型的(以避免替换/写入时数组数据类型出现numpy问题)

无论如何,我有一个类似的口述:

__sentinels = {
  np.float64: np.nan,
  np.uint16: np.iinfo(np.int16).min,
  np.uint32: np.iinfo(np.int32).min,
  ...
}
HDF库在每个数据集上粘贴一个numpy数据类型。所以,我在中阅读并尝试查找。。。这不管用。我可以解决这个问题,但我很好奇这里的语义是什么。以这个测试用例为例:

>>> np.dtype('uint') == np.uint
True
>>> x = {np.uint: 1}
>>> x[np.uint]
1
>>> x[np.dtype('uint')]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: dtype('uint32')
>>np.dtype('uint')==np.uint
真的
>>>x={np.uint:1}
>>>x[np.uint]
1.
>>>x[np.dtype('uint')]
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
KeyError:数据类型('uint32')
所以,好吧,它们的散列不相等(这是我的猜测,我不是一个真正的蟒蛇)。所以我试着:

>>> np.dtype('uint').__hash__()
-2588091675660302491
>>> np.uint.__hash__()          
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: descriptor '__hash__' of 'numpy.uint32' object needs an argument
>>np.dtype('uint')。\uuuuu散列
-2588091675660302491
>>>np.uint.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu散列()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:“numpy.uint32”对象的描述符“\uuuuu散列\uuuuuuu”需要参数
好的。。。所以我假设无论什么
np.uint.\uuuu散列\uuuu
都需要一个
self
arg。有趣的是,它也是可调用的(
np.uint(1.0)->1
),而
np.dtype('uint')
则不是


我对追踪源代码不太感兴趣,我有其他的方法来做这件事,但我真的很好奇这里的预期语义是什么。

看起来
np.uint
是一种合适的
类型
——因此
np.uint.\uu hash\uuuu
是一种用于
np.uint
实例的方法,而
np.dtype>('uint')
np.dtype
的一个实例,因此
np.dtype('uint')。\uuuu hash\uuuu
有一个实例可操作。您需要
hash(np.uint)
以获取
np.uint的哈希值。无论哪种方式,它们都不相同,因此会打破规则。@MisterMiyagi:看来是这样,谢谢!我对
=
的语义似乎很陌生here@MisterMiyagi:我肯定我错过了一些clas层次结构的东西或“python语义我还不懂”的其他实例看起来
np.dtype
\uuuu eq\uu
方法可以处理与相应函数的比较,例如
np.dtype('uint')。\uu eq\uu(np.uint)
。这是“==”成功的原因。但这与
is
测试或您发现的
dict
哈希不同。我想我没有见过任何人将
dtypes
用作
dict
键。@hpaulj:“我没有见过任何人将dtypes用作dict键”可能是个明智的选择!老实说,一开始我没有意识到这是一个类型,我愚蠢的错误。我现在使用的是dtype,工作正常