如何比较两个分别基于数字部分和非数字部分的numpy.array


import numpy as np
a = np.array([[1., 2., 3.], 
[4., 5., 'a']], dtype=object)
b = np.array([[1.00000001, 2., 3.], 
[4., 5., 'a']], dtype=object)
print(a == b)

实际输出:

[[False  True  True]
[ True  True  True]]

预期输出(由于1.00000001足够接近1(:

[[True  True  True]
[True  True  True]]

我不能使用numpy.isclose(),因为数组中有非数字部分。

这有点麻烦,但你可以使用掩码来解决它。例如,使用这个答案中的is_numeric_3函数(为了完整起见,我也会在这里报告(:

def is_float(val):
try:
float(val)
except ValueError:
return False
else:
return True
is_numeric_3 = np.vectorize(is_float, otypes = [bool]) # return numpy array
mask_a = is_numeric_3(a)
mask_b = is_numeric_3(b)
mask = mask_a & mask_b
result = a == b
result[mask] = np.isclose(a[mask], b[mask])

相关内容

  • 没有找到相关文章