如何比较两个numpy数组与一些NaN值?

Lui*_*uis 1 python arrays compare numpy python-3.x

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

我需要一个或多或少像这样的功能:

def func( array1, array2 ):
    if ???:
        return True
    else:
        return False
Run Code Online (Sandbox Code Playgroud)

例:

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
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗?

Eri*_*ric 5

您可以使用蒙面数组,它具有您在结合时要求的行为np.all:

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

np.all(x == zm) # returns True
np.all(y == zm) # returns False
Run Code Online (Sandbox Code Playgroud)

或者您可以明确地写出您的逻辑,注意numpy必须使用|而不是or,并且运算符优先级的差异导致:

def func(a, b):
    return np.all((a == b) | np.isnan(a) | np.isnan(b))
Run Code Online (Sandbox Code Playgroud)