Замена элементов numpy, которые не являются конечными

#python #numpy

Вопрос:

У меня есть массив numpy с не конечными элементами. Например :

 myMax = np.finfo(float).max
myArray = np.array((0,1,myMax*2))
 

Я хотел бы заменить не конечный элемент на myMax .

Следующая инструкция не работает :

 myArray[not np.isfinite(myArray)]=myMax
 

Итак, я использую эту команду :

 myArray=[i if np.isfinite(i) else myMax for i in myArray]
 

Это правильный способ сделать это или есть лучшее решение с точки зрения производительности (времени выполнения и/или использования памяти) ?

Спасибо за ответ.

Ответ №1:

Вы должны использовать побитовое НЕ ( ~ ):

 myArray[~np.isfinite(myArray)] = myMax
 

Пример:

 >>> import numpy as np
>>> myMax = np.finfo(float).max
>>> myArray = np.array((0,1,myMax*2))
<stdin>:1: RuntimeWarning: overflow encountered in double_scalars
>>> np.isfinite(myArray)
array([ True,  True, False])
>>> not np.isfinite(myArray)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>> ~np.isfinite(myArray)
array([False, False,  True])