Skip to main content
 首页 » 编程设计

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

2025年05月04日14xing901022

我需要比较一些 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))