繁体   English   中英

Python Xarray,按索引或维度排序?

[英]Python Xarray, sort by index or dimension?

xarray 中是否有某种sort_indexsort_by_dimension方法,就像xarray pandas.DataFrame.sort_index()一样,我可以在其中对xarray.DataArray ZA8CFDE6331BD59EB2AC96F891 中的一个维度进行排序? 在使用方面,我正在考虑类似data_array.sort(dim="dimension_name")的东西。

我找不到一个很好的方法来构建xarray ,所以我通过从我想要排序的坐标中取出一个切片值来创建一个新数组: da_sorted=da.loc[{'lon':sorted(da.coords['lon'].values)}]

这是一个更大的例子,测试数据显示了它在实践中的样子:

import numpy as np
import xarray as xr

data = np.random.rand(2, 3)

lat = [47, 45]

lon = [-118, -122, -120]
da = xr.DataArray(data, coords=[lat, lon], dims=['lat', 'lon'])


>>>> da
<xarray.DataArray (lat: 2, lon: 3)>
array([[ 0.16118 ,  0.215621,  0.599749],
       [ 0.144778,  0.984167,  0.416469]])
Coordinates:
  * lat      (lat) int64 47 45
  * lon      (lon) int64 -118 -122 -120,


da_sorted = da.loc[{'lon':sorted(da.coords['lon'].values)}]
>>>> da_sorted
<xarray.DataArray (lat: 2, lon: 3)>
array([[ 0.215621,  0.599749,  0.16118 ],
       [ 0.984167,  0.416469,  0.144778]])
Coordinates:
  * lat      (lat) int64 47 45
  * lon      (lon) int64 -122 -120 -118

你是说重新排列尺寸? 例如,使用.transpose()您可以重新排序整个数据集或特定数据阵列的维度,例如

ds.transpose('lat','lon','time')

xarray现在有一个用于此任务的内置方法,可以使用.sortby() https://xarray.pydata.org/en/stable/generated/xarray.DataArray.sortby.html轻松执行

@Kyle Heuton发布的代码现在变为:

import numpy as np
import xarray as xr

data = np.random.rand(2, 3)

lat = [47, 45]

lon = [-118, -122, -120]
da = xr.DataArray(data, coords=[lat, lon], dims=['lat', 'lon'])


>>>> da
<xarray.DataArray (lat: 2, lon: 3)>
array([[ 0.16118 ,  0.215621,  0.599749],
       [ 0.144778,  0.984167,  0.416469]])
Coordinates:
  * lat      (lat) int64 47 45
  * lon      (lon) int64 -118 -122 -120,


da_sorted = da.sortby(da.lon)
>>>> da_sorted
<xarray.DataArray (lat: 2, lon: 3)>
array([[ 0.215621,  0.599749,  0.16118 ],
       [ 0.984167,  0.416469,  0.144778]])
Coordinates:
  * lat      (lat) int64 47 45
  * lon      (lon) int64 -122 -120 -118

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM