Если массивы еще не являются логическими, сделайте их логическими. Это можно сделать дешево с помощью представления или, проще, с помощью astype
:
y_pred = y_pred.astype(bool)
y_true = y_true.astype(bool)
Этот шаг можно пропустить, если массивы уже являются логическими, или если они действительно никогда не будут содержать ничего, кроме нулей и единиц .
Теперь good_matches
это просто
good_matches = np.sum(y_pred & y_true)
Чтобы понять, почему это так, обратите внимание, что в дополнение к явно содержащему y_pred == y_true
выражение может быть истинным, только если y_pred
Значение true, поэтому оно автоматически подразумевает y_pref == 1
и y_true == 1
по определению оператора &
.
Следовательно, ваш конечный результат будет
np.sum(y_pred & y_true) / np.sum(y_true)
Это можно записать как
np.count_nonzero(y_pred & y_true) / np.count_nonzero(y_true)