我有以下DataArray da_conc
:
<xarray.DataArray (z: 160, time: 745500)>
array([[ 8.100153e-05, 9.084830e-05, 8.815896e-05, ..., 1.136741e-05,
1.088270e-05, 1.127361e-05],
[ 1.448712e+01, 1.505478e+01, 1.504403e+01, ..., 5.473790e-01,
5.625886e-01, 5.521512e-01],
[ nan, nan, nan, ..., 1.515498e-02,
1.276185e-02, 1.383076e-02],
...,
[ nan, nan, nan, ..., nan,
nan, nan],
[ nan, nan, nan, ..., nan,
nan, nan],
[ nan, nan, nan, ..., nan,
nan, nan]], dtype=float32)
Coordinates:
* z (z) float64 0.01008 0.02016 0.03024 0.04031 0.05039 0.06047 ...
* time (time) datetime64[ns] 2014-09-16T07:00:00 2014-09-16T07:00:01...
我用where
屏蔽了一些元素,如下所示:
da_conc.where( da_conc.round() == cut )
得到:
但实际上我需要知道z中不存在的值但是在z-25中,其中z包含之前找到的非空值的所有z坐标。换句话说,我想知道上面(操纵)图中离曲线25厘米的值。
我期待这样的事情发挥作用:
zcoord = da_conc.where( da_conc.round() == cut ).coords['z']
da_conc.sel( z = zcoord.round(2) == ( zcoord.round(2) - 25 ) )
欢迎任何帮助解决这个问题。 =)
已编辑#1:
我意识到这类似于shift
,但我没有移动数据,而是想在新坐标处找到数据。
编辑#2:
@ocefpaf创造了这个要点以阐明问题:
这是他的笔记本快照(谢谢@ocefpaf!):
z = np.linspace(0, 1.6, 160)
time = pd.date_range(start='2014-09-16T07:00:00', periods=745, freq='S')
data = np.random.rand(z.size, time.size) * 5
ds = xr.DataArray(data, coords=dict(z=z, time=time), dims=['z', 'time'])
z0 = np.random.rand(time.size)
z, time, data = np.broadcast_arrays(z[:, None], time[None, :], data)
z25 = z0+0.25
我想知道是否可以使用Xarray
在z25坐标处找到数据。