Я работаю с массивами в numba, которые иногда возвращают inf или nan в качестве записи, которую затем мне нужно настроить на ноль. Я работаю в режиме nopython, поэтому я хочу знать, есть ли способ использовать логическое индексирование (или умножение), чтобы настроить любые элементы nan или inf в массиве на ноль (форма массива (vertex_number, 1)).
Очевидно, я могу просто перебрать массив следующим образом:
from numpy import isnan, isinf, array, zeros, nan, inf, ones
from numba import jit
v = ones((10, 1))
v[0] = nan
v[-1] = inf
print(v)
@jit(nopython=True, nogil=True)
def reciprocal_v(v):
u = 1 / v
for i in range(len(u)): # get rid of zero length reciprocals...
if (isinf(u[i])[0] == True) | (isnan(u[i])[0] == True):
u[i] = 0.0
return u
u = reciprocal_v(v)
print(u)
Я попробовал логическое умножение, но inf*0 возвращает nan, а nan*0 возвращает nan
@jit(nopython=True)
def numba_isnan(x): return isnan(x)
@jit(nopython=True)
def numba_isinf(x): return isinf(x)
@jit(nopython=True, nogil=True)
def reciprocal_v_bool(v):
u = 1 / v
u = u * ~(numba_isnan(u) | numba_isinf(u))
return u
if (isinf(u[i,0]) | (isnan(u[i,0]))
? - person B. M.   schedule 24.10.2017