NumPy - 以矢量化方式测试相等性,包括 np.nan、np.nat、np.NZERO 和 np.PZERO

NumPy - Testing equality including np.nan, np.nat, np.NZERO and np.PZERO in a vectorized way

我基本上想在 Numpy 中编写一个矢量化函数,它将按元素比较所涉及的 二进制表示 数据类型 数组。

例如,

此外,该函数应该是向量化的、快速的(C 速度)并且至少 "look like" 一个 ufunc,因为它应该支持数组上的广播和串接。

我已经试过了,但它不适用于 NaT,等等:Comparing NumPy arrays so that NaNs compare equal

以下要求 Pandas,我不想这样做,他们会要求 NaN == NaT

我可以将 np.isnat 添加到问题 1,但这不会比较对象的精度。

其中 none 可以完成 NZERO/PZERO 的事情。

比较底层 view 似乎完全符合我的要求:

def compare(x, y):
    x, y = np.broadcast_arrays(x, y)
    dtx = x.dtype
    dty = y.dtype
    if dtx != dty:
        return np.zeros(x.shape, dtype=bool)
    xv = x.view((np.uint8, x.itemsize))
    yv = y.view((np.uint8, y.itemsize))
    return np.all(xv == yv, axis=-1)