Open delgadom opened 3 weeks ago
@hollymandel do you have time to take a quick look here? Simply diagnosing the core problem would be quite helpful
This behavior seems to come from scipy:
import scipy
print(scipy.interpolate.interp1d(x = [0,2,4], y =[np.nan, 1,2])([0,1,2,3,4])) # [nan nan 1. 1.5 2. ]
print(scipy.interpolate.interp1d(x = [0,2,4], y =[[np.nan, 1,2]])([0,1,2,3,4])) # [[nan nan nan 1.5 2. ]]
I think adding a warning (as suggested in #5852) is reasonable, can do the PR if others agree.
Nice, I think a warning that suggests .dropna
would be good.
Here is a draft PR: #9813
I guess the maintainers should decide whether this is too noisy? I'm not really sure.
What happened?
May be a duplicate of #5852, and as stated there, interp with nans isn't really supported. But I noticed that in some cases
xr.DataArray.interp
drops valid data if there are NaNs in the array, and that this behavior is different depending on the number of dimensions, even if only a single dimension is specified (sointerp1d
should be used in every case).Not sure if this warrants a different issue, but the NaN handling appears to be different depending on the number of dimensions, even if we're interpolating along a single dimension (so should be essentially broadcasting
interp1d
:Here's a MRE:
gives
Note that the second interpolation case, in which the array is 2D, drops a valid value (1, in position x=2), even though it is present in the original array. The first case correctly interpolates between 1 and 2 and does not drop the first value.
Apologies - I don't have time now to diagnose whether this is an xarray issue with the new 2D interp handling or simply a scipy interp1d broadcasting issue, but it was certainly unexpected!
What did you expect to happen?
No response
Minimal Complete Verifiable Example
No response
MVCE confirmation
Relevant log output
No response
Anything else we need to know?
No response
Environment