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