Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

set very low values to zero in numpy

Tags:

python

numpy

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.

like image 592
Eoin Murray Avatar asked Jan 19 '13 21:01

Eoin Murray


People also ask

How do I change Nan to zero in NumPy?

You can use numpy. nan_to_num : numpy. nan_to_num(x) : Replace nan with zero and inf with finite numbers.

What is the zero () function in NumPy use to?

The zeros() function is used to get a new array of given shape and type, filled with zeros. Shape of the new array, e.g., (2, 3) or 2. The desired data-type for the array, e.g., numpy. int8.

How do I reduce dim in NumPy?

To reduce a multi-dimensional array, use the np. ufunc. reduce() method in Python Numpy.


1 Answers

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.

like image 65
DSM Avatar answered Sep 17 '22 17:09

DSM