arccos
является ufunc
и принимает параметры where
и out
:
In [226]: x = np.linspace(-2,2,20)
In [227]: np.arccos(x, where=(abs(x)<1), out=np.full_like(x,np.pi))
Out[227]:
array([3.14159265, 3.14159265, 3.14159265, 3.14159265, 3.14159265,
2.8157097 , 2.39918372, 2.12505816, 1.89208492, 1.67625485,
1.4653378 , 1.24950774, 1.01653449, 0.74240893, 0.32588296,
3.14159265, 3.14159265, 3.14159265, 3.14159265, 3.14159265])
Это позволяет указать, какие входные значения следует пропустить, а какие использовать вместо.
По сравнению с проверенной math
версией:
def foo(x):
try:
return math.acos(x)
except ValueError:
return math.pi
In [239]: np.array([foo(i) for i in x])
Out[239]:
array([3.14159265, 3.14159265, 3.14159265, 3.14159265, 3.14159265,
2.8157097 , 2.39918372, 2.12505816, 1.89208492, 1.67625485,
1.4653378 , 1.24950774, 1.01653449, 0.74240893, 0.32588296,
3.14159265, 3.14159265, 3.14159265, 3.14159265, 3.14159265])