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])