clouddrift
clouddrift copied to clipboard
fail to "vectorize" velocity_from_position
I am attempting to apply velocity_from_position
to xarray.DataArrays of lon, lat, and time. I have been following a tutorial for a similar situation. With the following ds
Dataset:
ds.info()
xarray.Dataset {
dimensions:
trajectory = 593297 ;
obs = 1440 ;
variables:
float64 time(trajectory, obs) ;
float32 lat(trajectory, obs) ;
float32 lon(trajectory, obs) ;
int32 obs(obs) ;
int64 trajectory(trajectory) ;
}
I can easily do:
u,v = velocity_from_position(ds.lon.isel(trajectory=0),ds.lat.isel(trajectory=0),ds.time.isel(trajectory=0))
or
u2,v2 = xr.apply_ufunc(
velocity_from_position,
ds.lon.isel(trajectory=0),
ds.lat.isel(trajectory=0),
ds.time.isel(trajectory=0),
input_core_dims=[["obs"], ["obs"], ["obs"]],
output_core_dims=[["obs"], ["obs"]],
dask="allowed",
)
but the following fails:
u2,v2 = xr.apply_ufunc(
velocity_from_position, # first the function
ds.lon.isel(trajectory=slice(0,10)),
ds.lat.isel(trajectory=slice(0,10)),
ds.time.isel(trajectory=slice(0,10)),
input_core_dims=[["obs"], ["obs"], ["obs"]],
output_core_dims=[["obs"],["obs"]],
dask="allowed",
vectorize=True,
)
and the bottom line of the error is
File ~/miniconda3/envs/research/lib/python3.10/site-packages/clouddrift/analysis.py:65, in velocity_from_position(x, y, time, coord_system, difference_scheme)
57 # Compute dx, dy, and dt
58 if difference_scheme == "forward":
59
60 # All values except the ending boundary value are computed using the
(...)
63
64 # Time
---> 65 dt[:-1] = np.diff(time)
66 dt[-1] = dt[-2]
68 # Space
ValueError: could not broadcast input array from shape (10,1439) into shape (9,1440)
So yes, I get the error but I don't understand if the fix is to apply ufunc
differently or make velocity_from_position
more flexible?