我正在尝试使用下面的代码使用numpy数组计算F1_Score
ypred = np.squeeze(imgs_mask_predict[jj,:,:,:])
ytrue = np.squeeze(imgs_test_mask[jj,:,:,:])
def f1_score_single(y_true, y_pred):
y_true = y_true.flatten('F')
y_pred = y_pred.flatten('F')
cross_size = len(y_true & y_pred)
if cross_size == 0: return 0.
p = 1. * cross_size / len(y_pred)
r = 1. * cross_size / len(y_true)
return (2. * (p * r) / (p + r))
我收到错误
输入类型不支持“ufunc'bitwise_and',根据此代码行中的强制转换规则''safe'',输入无法安全地强制转换为任何支持的类型
cross_size = len(y_true & y_pred)
我试图搜索此错误,但没有得到原因和解决方案。我该如何解决这个问题?
答案 0 :(得分:2)
您应该使用isclose
作为浮点数。
cross_size = np.isclose(y_true, y_pred).sum()
您还可以通过atol
和rtol
关键字参数you can see the documentation here设置相似度阈值。
答案 1 :(得分:0)
您可以尝试使用intersect1d代替&,例如,使用np.intersect1d与您打算对&
进行的操作相同import numpy as np
y_true=np.array([1.0,2.0,4.0,1.0,2.0,4.0,1.0,2.0,4.0,1.0])
y_score=np.array([1.0,1.0,2.0,4.0,1.0,2.0,4.0,1.0,2.0,4.0])
x=np.intersect1d(y_true, y_score)
print(x)
结果将是[1。 2. 4。]
您可以在https://www.programiz.com/python-programming/online-compiler/
处测试程序