社区!
\n在处理气候模拟模型的输出时,我遇到了一些奇怪的 xarray 行为 - 按纬度切片返回一个空数组。
\nxr.open_mfdataset(nc_list[1])\nRun 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)\nRun 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)\nRun 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)\nRun Code Online (Sandbox Code Playgroud)\n但是,按纬度过滤会返回一个空列表:
\nxr.open_mfdataset(nc_list[1]).sel(lon=slice(0, 100))\nRun 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)\nRun 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)\nRun Code Online (Sandbox Code Playgroud)\n