【问题标题】:Read multiple coordinates with xarray使用 xarray 读取多个坐标
【发布时间】:2017-03-25 11:58:42
【问题描述】:

我正在使用 xarray 从 openDAP 服务器读取单点数据,然后将 xarray 对象转换为数据帧。这工作正常。我想在一次调用中读取多个点,但我不知道这是最好的方法。

这是我用于单点的代码:

import pandas as pd
import xarray as xr

url = 'http://nomads.ncep.noaa.gov:9090/dods/gfs_0p25/gfs20161111/gfs_0p25_00z'
lats =  [40.1,40.5,42.3]
lons =  [1.02,1.24,1.84]
vars = ['dswrfsfc', 'tmp2m', 'pressfc']

ds = xr.open_dataset(url)

data_single  = ds.sel(lon=lons[0], lat=lats[0], method='nearest')    
ts_dataframe_single = data_single[vars].to_dataframe()

为了阅读多个点,我这样做:

data  = ds.sel(lon=lons, lat=lats, method='nearest')
ts_dataframe = data[vars].to_dataframe()

这是data.coords的输出:

data.coords
Out[10]: 
Coordinates:
  * time     (time) datetime64[ns] 2016-11-11 2016-11-11T03:00:00 ...
  * lev      (lev) float64 1e+03 975.0 950.0 925.0 900.0 850.0 800.0 750.0 ...
  * lat      (lat) float64 40.0 40.5 42.25
  * lon      (lon) float64 1.0 1.25 1.75

当我转换为数据框时,生成的对象在时间戳中包含时间和坐标的混合。看起来是这样的:

我的问题是:

  • 这是用 xarray 检索多点的最佳方法吗?
  • 如何从结果数据帧的单个点中提取数据?

提前致谢!

【问题讨论】:

    标签: python-2.7 python-xarray


    【解决方案1】:

    您看到的内存问题是输出是像素值的 lat x lon 网格,而您实际上只对网格的对角线条目感兴趣,对应于每个 lat、lon 坐标对。这在计算上非常昂贵,因为它正在搜索 n^2 点而不是 n 点的像素值。

    'sel_points()' 已被弃用,因为它可以使用 sel/isel 完成(见下文)。

    相反,您可以将 lat 和 lon 设置为自己的 DataArray:

    lats = xr.DataArray(lats, dims='z') #'z' is an arbitrary name placeholder
    lons = xr.DataArray(lons, dims='z')
    data = ds.sel(lat = lats, lon = lons, method = 'nearest')
    #VariableName = 'lev', so you can also do: 
    data = ds.lev.sel(lat = lats, lon = lons, method = 'nearest')
    

    请参阅此相关post 了解更多信息。

    【讨论】:

      【解决方案2】:

      另一种方法是切片

      data = ds.sel(lat=slice(40.1,42.3), lon=slice(1.02,1.84))

      但是,您获得的积分比您要求的要多。不过速度很快。

      【讨论】:

        【解决方案3】:

        我想你想要sel_points 而不是sel。所以,是这样的:

        data  = ds.sel_points(lon=lons, lat=lats, method='nearest')
        ts_dataframe = data[vars].to_dataframe()
        

        【讨论】:

        • 感谢@jhamman,这个方法应该可以完成。问题是,当我运行命令data = ds.sel_points(lon=lons, lat=lats, method='nearest') 时,计算机开始思考,RAM 内存使用量上升,直到我失去对计算机的控制。这正常吗?我做错了吗?
        • sel_points 已弃用。内存问题与它正在搜索的大 (npoints^2) 点网格有关。
        猜你喜欢
        • 2021-01-14
        • 2017-09-25
        • 2020-06-08
        • 2021-12-12
        • 2022-01-13
        • 1970-01-01
        • 2020-11-18
        • 2021-12-17
        • 2019-01-17
        相关资源
        最近更新 更多