Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RuntimeWarning: invalid value encountered in divide x_2 = (-b__ - np.sqrt(discriminant)) / (2 * a__) #608

Open
saevioapps opened this issue Jul 19, 2024 · 3 comments

Comments

@saevioapps
Copy link

saevioapps commented Jul 19, 2024

Code Sample, a minimal, complete, and verifiable piece of code

I have a temperature grib message and I want to resample it using cubic resampling. However, i get these warnings in the console. If i lower the radius value I no longer get the warnings but I get 0s in the interpolated data.

 UserWarning: You will likely lose important projection information when converting to a PROJ string from another format. See: https://proj.org/faq.html#what-is-the-best-format-for-describing-coordinate-reference-systems
  proj = self._crs.to_proj4(version=version)

RuntimeWarning: invalid value encountered in divide   x_2 = (-b__ - np.sqrt(discriminant)) / (2 * a__)
import numpy as np
from pyproj import CRS
from pyresample.geometry import GridDefinition
from pyresample import create_area_def
from pyresample.bilinear import NumpyBilinearResampler
from pyresample import geometry


data = np.fromfunction(lambda y, x: y * x, (100, 100))
lons = np.fromfunction(lambda y, x: -180 + x * 3.6, (100, 100))
lats = np.fromfunction(lambda y, x: -90 + y * 1.8, (100, 100))


source_def = geometry.GridDefinition(lons=lons, lats=lats)

crs = CRS.from_epsg(3857)  # EPSG code for WGS 84 / Pseudo-Mercator
target_def = create_area_def('my_area',
        crs,
        1000, 1000,
        area_extent=[-180, -85, 180, 85],                
        units='degrees',
        description='Target grid in Mercator projection')


resampler = NumpyBilinearResampler(source_def, target_def, radius_of_influence=200000)
interpolated_data = resampler.resample(data)

Thank you!

@djhoese
Copy link
Member

djhoese commented Jul 21, 2024

Normally these types of "invalid value" warnings from numpy come from NaNs in the data or geolocation data. If you're getting this with your example code...then I'm not sure where it would be coming from, especially for large radii values since I would expect that to mean more valid pixels are involved not more invalid.

Maybe @pnuu has ideas since he originally wrote that resampler class.

@pnuu
Copy link
Member

pnuu commented Jul 22, 2024

The only weird thing is that there is no warning from the previous line which is identical other than there being a addition instead of subtraction. Most likely there are NaNs in a__ or b__ that cause the warning. Nothing to worry about.

@pnuu
Copy link
Member

pnuu commented Jul 22, 2024

And to clarfiy, the NaN values can be due to the four points used in bilinear calculation to form a paralellogram (opposite edges are parallel) or one/two of the edges being exactly vertical. These special casesare handled in the next steps. The third option forNaN`s is that there are no valid points for the interpolation at all, like if the target area extends beyond the source data coverage, or there are invalid coordinates..

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants