Удаление строк и столбцов только с NaN из массива numpy - PullRequest
0 голосов
/ 07 марта 2020

Я ищу решение этой проблемы.

При экспериментировании с масками я получил эту ошибку и понятия не имею, почему. Это работает для строк, но не для столбцов?

import numpy as np

a = np.array(
    [[1, np.nan, 0],
    [0, np.nan, 0],
    [0, np.nan, 0],
    [np.nan, np.nan, np.nan],
    [2, np.nan, 4]])

mask_row = np.all(np.isnan(a), axis=1)
mask_column = np.all(np.isnan(a), axis=0)
print(a[~mask_row])
print(a[~mask_column])

Это ошибка, которую я получаю для последнего оператора печати:

IndexError: boolean index did not match indexed array along dimension 0; dimension is 5 but corresponding boolean dimension is 3

1 Ответ

1 голос
/ 07 марта 2020

Это потому, что mask_column - это array([False, True, False]).

В частности, mask_column.shape - это (3,), то есть 1 размер имеет размер 3, тогда как a.shape - это (5,3), поэтому mask_column не может быть переданным (проверьте numpy широковещание для подробного объяснения широковещания).

Поэтому, чтобы отфильтровать столбцы nan, вам нужно передать такую ​​маску как второе измерение после выбора всех строк, а именно:

print(a[:, ~mask_column])
[[ 1.  0.]
 [ 0.  0.]
 [ 0.  0.]
 [nan nan]
 [ 2.  4.]]
...