Xarray:切片坐标返回空维度

Ily*_*lya 7 python-xarray

社区!

\n

在处理气候模拟模型的输出时,我遇到了一些奇怪的 xarray 行为 - 按纬度切片返回一个空数组。

\n
xr.open_mfdataset(nc_list[1])\n
Run Code Online (Sandbox Code Playgroud)\n

输出

\n
<xarray.Dataset>\nDimensions:        (bnds: 2, time: 1128, lev: 13, lat: 360, lon: 720)\nCoordinates:\n  * bnds           (bnds) float64 0.0 1.0\n  * time           (time) float64 4.14e+03 4.141e+03 ... 5.266e+03 5.267e+03\n  * lev            (lev) float64 1.0 2.0 3.0 4.0 5.0 ... 9.0 10.0 11.0 12.0 13.0\n  * lat            (lat) float64 89.75 89.25 88.75 ... -88.75 -89.25 -89.75\n  * lon            (lon) float64 -179.8 -179.2 -178.8 ... 178.8 179.2 179.8\nData variables:\n    depth          (time, lev, lat, lon) float64 ...\n    depth_bnds     (bnds, time, lev, lat, lon) float64 ...\n    soilmoistfroz  (time, lev, lat, lon) float32 ...\nAttributes: (12/15)\n
Run Code Online (Sandbox Code Playgroud)\n

按经度切片效果很好:

\n
<xarray.Dataset>\nDimensions:        (bnds: 2, time: 1128, lev: 13, lat: 360, lon: 720)\nCoordinates:\n  * bnds           (bnds) float64 0.0 1.0\n  * time           (time) float64 4.14e+03 4.141e+03 ... 5.266e+03 5.267e+03\n  * lev            (lev) float64 1.0 2.0 3.0 4.0 5.0 ... 9.0 10.0 11.0 12.0 13.0\n  * lat            (lat) float64 89.75 89.25 88.75 ... -88.75 -89.25 -89.75\n  * lon            (lon) float64 -179.8 -179.2 -178.8 ... 178.8 179.2 179.8\nData variables:\n    depth          (time, lev, lat, lon) float64 ...\n    depth_bnds     (bnds, time, lev, lat, lon) float64 ...\n    soilmoistfroz  (time, lev, lat, lon) float32 ...\nAttributes: (12/15)\n
Run Code Online (Sandbox Code Playgroud)\n

输出

\n
<xarray.Dataset>\nDimensions:        (bnds: 2, time: 1128, lev: 13, lat: 360, lon: 200)\nCoordinates:\n  * bnds           (bnds) float64 0.0 1.0\n  * time           (time) float64 4.14e+03 4.141e+03 ... 5.266e+03 5.267e+03\n  * lev            (lev) float64 1.0 2.0 3.0 4.0 5.0 ... 9.0 10.0 11.0 12.0 13.0\n  * lat            (lat) float64 89.75 89.25 88.75 ... -88.75 -89.25 -89.75\n  * lon            (lon) float64 0.25 0.75 1.25 1.75 ... 98.25 98.75 99.25 99.75\nData variables:\n    depth          (time, lev, lat, lon) float64 ...\n    depth_bnds     (bnds, time, lev, lat, lon) float64 ...\n    soilmoistfroz  (time, lev, lat, lon) float32 ...\nAttributes: (12/15)\n
Run Code Online (Sandbox Code Playgroud)\n

但是,按纬度过滤会返回一个空列表:

\n
xr.open_mfdataset(nc_list[1]).sel(lon=slice(0, 100))\n
Run Code Online (Sandbox Code Playgroud)\n

输出

\n
<xarray.Dataset>\nDimensions:        (bnds: 2, time: 1128, lev: 13, lat: 0, lon: 720)\nCoordinates:\n  * bnds           (bnds) float64 0.0 1.0\n  * time           (time) float64 4.14e+03 4.141e+03 ... 5.266e+03 5.267e+03\n  * lev            (lev) float64 1.0 2.0 3.0 4.0 5.0 ... 9.0 10.0 11.0 12.0 13.0\n  * lat            (lat) float64 \n  * lon            (lon) float64 -179.8 -179.2 -178.8 ... 178.8 179.2 179.8\nData variables:\n    depth          (time, lev, lat, lon) float64 ...\n    depth_bnds     (bnds, time, lev, lat, lon) float64 ...\n    soilmoistfroz  (time, lev, lat, lon) float32 ...\nAttributes: (12/15)\n
Run Code Online (Sandbox Code Playgroud)\n

你能告诉我我\xe2\x80\x99m 做错了什么吗?

\n

解决了

\n

坐标值的顺序很重要,因此应按纬度进行切片

\n
<xarray.Dataset>\nDimensions:        (bnds: 2, time: 1128, lev: 13, lat: 360, lon: 200)\nCoordinates:\n  * bnds           (bnds) float64 0.0 1.0\n  * time           (time) float64 4.14e+03 4.141e+03 ... 5.266e+03 5.267e+03\n  * lev            (lev) float64 1.0 2.0 3.0 4.0 5.0 ... 9.0 10.0 11.0 12.0 13.0\n  * lat            (lat) float64 89.75 89.25 88.75 ... -88.75 -89.25 -89.75\n  * lon            (lon) float64 0.25 0.75 1.25 1.75 ... 98.25 98.75 99.25 99.75\nData variables:\n    depth          (time, lev, lat, lon) float64 ...\n    depth_bnds     (bnds, time, lev, lat, lon) float64 ...\n    soilmoistfroz  (time, lev, lat, lon) float32 ...\nAttributes: (12/15)\n
Run Code Online (Sandbox Code Playgroud)\n