#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])