set very low values to zero in numpy

numpy, python

Solution

Hmmm. I'm not super-happy with it, but this seems to work:

>>> a = np.array([0 +  0.5j, 0.25 + 1.2352444e-24j, 0.25+ 0j, 2.46519033e-32 + 0j])
>>> a
array([  0.00000000e+00 +5.00000000e-01j,
         2.50000000e-01 +1.23524440e-24j,
         2.50000000e-01 +0.00000000e+00j,   2.46519033e-32 +0.00000000e+00j])
>>> tol = 1e-16
>>> a.real[abs(a.real) < tol] = 0.0
>>> a.imag[abs(a.imag) < tol] = 0.0
>>> a
array([ 0.00+0.5j,  0.25+0.j ,  0.25+0.j ,  0.00+0.j ])

and you can choose your tolerance as your problem requires. I usually use an order of magnitude or so higher than

>>> np.finfo(np.float).eps
2.2204460492503131e-16

but it's problem-dependent.

Problem

In numpy I have an array like ``` [0 + 0.5j, 0.25 + 1.2352444e-24j, 0.25+ 0j, 2.46519033e-32 + 0j] ``` what is the fastest and easiest way to set the super low value to zero to get ``` [0 + 0.5j, 0.25 + 0j, 0.25+ 0j, 0 + 0j] ``` efficiency is not the paramount.

Original source