Open AlxLhrNc opened 2 years ago
for reference, here's the MCVE:
import xarray as xr
ds = xr.tutorial.open_dataset("air_temperature")
n = 3
window_size = {name: n for name in ["lat", "lon"]}
window = ds.rolling(window_size, center=True)
peak_min = window.argmin()
peak_max = window.argmax()
As far as I can tell, the reason is that np.argmin
does not support more than one axis (the actual call is here).
We could try to work around this by wrapping argmin
and argmax
in a function that ravels / unravels the reduce dimensions.
Thank you for upgrading this question. Using keewis suggestion:
We could try to work around this by wrapping
argmin
andargmax
in a function that ravels / unravels the reduce dimensions.
I had a look into numpy
documentation and came up with a work around like so:
import numpy as np, xarray as xr
arr = xr.DataArray(np.ones((5,6,7)))
arr[1,3,2], arr[3,1,4] = 0, 2
print('Values:',arr.min(), arr.max())
min_pos = np.concatenate(np.where(arr == arr.min()))
max_pos = np.concatenate(np.where(arr == arr.max()))
print('Indexes on nD:', min_pos, max_pos)
It is not perfect I suppose but it is doing the job for now.
What is your issue?
I am working with
xarray.core.rolling.DataArrayRolling
objects and for some obscure reason, they raise the following error when the.argmin()
and.argmax()
methods are used:As far as I understand, these methods are included based on the
xarray
documentation, so it should work as.min()
,.max()
or.mean()
are working fine: https://docs.xarray.dev/en/stable/generated/xarray.core.rolling.DataArrayRolling.argmax.htmlAny insight on what I am doing wrong ?