对于中等大小的xarray网格,Geoviews数据集类占用了太多时间

2024-06-16 13:37:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Geoviews数据集类绘制xarray网格。 数据具有形状:(1213001936)和坐标(月、经度、纬度)

实例化花费了太多的时间(在i5 32gbram计算机中几乎需要7个小时)。 绘制一个较小的数据集是可行的(需要几秒钟)

这是xarray(名为xmam)的字符串表示形式:

<xarray.DataArray (MeanTemp Month:: 12, Latitude: 1300, Longitude: 1936)>
array([[[ nan,  nan, ...,  nan,  nan],
        [ 14.,  14., ...,  nan,  nan],
        ..., 
        [ nan,  nan, ...,  nan,  nan],
        [ nan,  nan, ...,  nan,  nan]],

       [[ nan,  nan, ...,  nan,  nan],
        [ 16.,  16., ...,  nan,  nan],
        ..., 
        [ nan,  nan, ...,  nan,  nan],
        [ nan,  nan, ...,  nan,  nan]],

       ..., 
       [[ nan,  nan, ...,  nan,  nan],
        [ 17.,  17., ...,  nan,  nan],
        ..., 
        [ nan,  nan, ...,  nan,  nan],
        [ nan,  nan, ...,  nan,  nan]],

       [[ nan,  nan, ...,  nan,  nan],
        [ 14.,  14., ...,  nan,  nan],
        ..., 
        [ nan,  nan, ...,  nan,  nan],
        [ nan,  nan, ...,  nan,  nan]]], dtype=float32)
Coordinates:
  * MeanTemp Month:  (MeanTemp Month:) |S9 'January' 'February' ... 'December'
  * Latitude         (Latitude) float64 25.57 25.56 25.55 ... 14.76 14.75 14.74
  * Longitude        (Longitude) float64 -103.6 -103.6 -103.6 ... -87.49 -87.48

我就是这样实例化Geoviews数据集的

gvds = gv.Dataset(xmam,kdims=['Latitude', 'Longitude'],vdims=['MeanTemp Month:'],dynamic=True)

I tried with and without the dynamic parameter giving similar results.

你觉得有什么问题

请注意,Datashader还没有角色,因为我只是创建对象,甚至没有打印它


Tags: 数据实例网格绘制dynamicnanxarrayfloat64
1条回答
网友
1楼 · 发布于 2024-06-16 13:37:29

问题有两个:

  1. xarray(xa)是如何建造的。也就是说,dims参数引用坐标的名称coords参数(如果是字典)需要与dim同名

考虑以下示例: 假设data是一个有形状的numpy narray(12100100)

coords_months = range(12)
coords_lon = np.linspace(-103,87,100)
coords_lat = np.linspace(14,25,100)
dims = ['months','longitude', 'latitude']
coords = {'months':coords_months,'latitude':coords_lat,'longitude':coords_lon }
xdata = xa.DataArray(data,coords=coords,dims=dims,name='MeanTemperature')
  1. 正如philippjfr提到的,Geoviews(gv)数据集构造函数的声明是错误的

相反,我用了这个:

gvds = gv.Dataset(xdata)

绘图花了一点时间(2分钟)。但是,我可以使用中定义的regrid方法:

from holoviews.operation.datashader import regrid
image = gvds.to(gv.Image,['Longitude','Latitude'],dynamic=True)
regrid(image)

效果很好

其他相关问题here

相关问题 更多 >