Очистите массив np от NaN, удаляя записи в другом массиве соответственно

У меня есть два массива numpy, один из которых содержит около 1% NaN.

a = np.array([-2,5,nan,6])
b = np.array([2,3,1,0])

Я хотел бы вычислить среднеквадратичную ошибку a и b, используя sklearnmean_squared_error.

Итак, мой вопрос: каков питонический способ удаления всех NaN из a, одновременно удаляя все соответствующие записи из b как можно более эффективно?

Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
0
0
125
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете просто использовать ванильный 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

Оба решения отлично работают. И спасибо, что познакомили меня с маскировкой!

Casimir 28.10.2018 17:46

Другие вопросы по теме