输入类型Numpy数组不支持'bitwise_and'

时间:2018-02-14 13:59:18

标签: python-3.x numpy deep-learning bitwise-and

我正在尝试使用下面的代码使用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)

我试图搜索此错误,但没有得到原因和解决方案。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

您应该使用isclose作为浮点数。

cross_size = np.isclose(y_true, y_pred).sum()

您还可以通过atolrtol关键字参数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/

处测试程序