python - 如何比较两个具有 NaN 值的 numpy 数组?

标签 python arrays python-3.x numpy compare

我需要比较一些 numpy 数组,它们应该具有相同顺序的相同元素,除了第二个数组中的一些 NaN 值。

我需要一个或多或少像这样的函数:

def func( array1, array2 ):
    if ???:
        return True
    else:
        return False

示例:

x = np.array( [ 1, 2, 3, 4, 5 ] )
y = np.array( [ 11, 2, 3, 4, 5 ] )
z = np.array( [ 1, 2, np.nan, 4, 5] )

func( x, z ) # returns True
func( y, z ) # returns False

数组的长度始终相同,NaN 值始终位于第三个(x 和 y 始终只有数字)。我可以想象已经有一个功能或其他东西,但我只是没有找到它。

有什么想法吗?

最佳答案

您可以使用屏蔽数组,当与 np.all 结合使用时,它具有您要求的行为:

zm = np.ma.masked_where(np.isnan(z), z)

np.all(x == zm) # returns True
np.all(y == zm) # returns False

或者您可以明确地写出您的逻辑,注意 numpy 必须使用 | 而不是 or,以及由此产生的运算符优先级的差异:

def func(a, b):
    return np.all((a == b) | np.isnan(a) | np.isnan(b))

关于python - 如何比较两个具有 NaN 值的 numpy 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41914226/

相关文章:

python - 当cron带来新数据时如何正确更新webapp

arrays - 如何在 O(nlogn) 和 O(n) 内查找数组中所有 "feasible"值?

ruby - 使用并行赋值交换数组元素

python - 如何在多个 Python 模块中更改变量?

python - 为什么变量的类型提示不作为函数参数的类型提示处理?

python - 分割给定字节偏移量的 utf-8 编码字符串 (python 2.7)

python - 在 Linux 上使用 Python 编写 Excel 单元格注释?

python - 查找满足特定约束的子集

java - Canvas 位图到字节数组并读回麻烦

python - pyinstaller kivy错误无法获取任何图像提供程序,中止