Я решил это сам. Проблема, по-видимому, заключается в том, что numpy.heaviside использует np.equal -подобную проверку нуля. Вот функция, которая использует np.isclose .
import numpy as np
def heaviside_close(x1, x2):
closeCheck = np.isclose(x1, np.zeros_like(x1))
heavisideBare = np.heaviside(x1, 0.0)
zeroVal = np.where(closeCheck, x2, 0.0)-np.where(closeCheck, heavisideBare, np.zeros_like(heavisideBare))
result = heavisideBare+zeroVal
return result
print(heaviside_close(np.asarray([-1., -0.1, 1e-20, 0.1, 1.]), 0.5))
# >>> [0. 0. 0.5 1. 1. ]
print(np.heaviside(np.asarray([-1., -0.1, 1e-20, 0.1, 1.]), 0.5))
# >>> [0. 0. 1. 1. 1. ]