Удалить строки с бесконечным значением из массива - PullRequest
1 голос
/ 03 февраля 2020

У меня есть массив numpy

A = np.array([[1, 2, 3, 4], 
             [2, float('inf'), 3, 4],
             [5, 6, 7, 8]])  

Я хотел бы удалить строки, содержащие в себе бесконечное значение, чтобы результаты были

np.array([[1,2,3,4],
          [5,6,7,8]])

Я пытался A = A[float('inf') not in A], но результат array([], shape=(0, 3, 4), dtype=float64).

Я мог бы сделать

B = []
for line in A:
    if float('inf') not in line:
        B.append(line)
A = np.array(B)

но есть ли лучший способ сделать это?

Ответы [ 2 ]

3 голосов
/ 03 февраля 2020

Учитывая, что у вас есть массив NumPy, решение на основе NumPy будет работать намного лучше, чем списки python. Вы можете использовать np.isinf с any здесь:

A[~np.isinf(A).any(1)]

array([[1., 2., 3., 4.],
       [5., 6., 7., 8.]])

is_inf = np.isinf(A) # returns True when there is an Inf
print(is_inf)

array([[False, False, False, False],
       [False,  True, False, False],
       [False, False, False, False]])

is_inf_any = is_inf.any(1) # Checks is there are any Trues along axis 1 
                           # (hence reduces along that axis)
print(is_inf_any)

# array([False,  True, False])

~is_inf_any # applies a bitwise logical not
# array([ True, False,  True])
1 голос
/ 03 февраля 2020

Для этого вы можете использовать список .

A = np.array([line for line in A if float('inf') not in line])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...