У меня есть два массива numpy, один из которых содержит около 1% NaN.
a = np.array([-2,5,nan,6])
b = np.array([2,3,1,0])
Я хотел бы вычислить среднеквадратичную ошибку a
и b
, используя sklearn
mean_squared_error
.
Итак, мой вопрос: каков питонический способ удаления всех NaN из a
, одновременно удаляя все соответствующие записи из b
как можно более эффективно?
Вы можете просто использовать ванильный NumPy np.nanmean
для этой цели:
In [136]: np.nanmean((a-b)**2)
Out[136]: 18.666666666666668
Если этого не существует или вы действительно хотите использовать метод sklearn
, вы можете создать маска для индексации NaN:
In [148]: mask = ~np.isnan(a)
In [149]: mean_squared_error(a[mask], b[mask])
Out[149]: 18.666666666666668
Оба решения отлично работают. И спасибо, что познакомили меня с маскировкой!