Python 创建玩具3D阵列包含每小时频率、温度和纬度、经度坐标

Python 创建玩具3D阵列包含每小时频率、温度和纬度、经度坐标,python,pandas,numpy,multidimensional-array,python-xarray,Python,Pandas,Numpy,Multidimensional Array,Python Xarray,我想创建一个三维数据数组,它存储具有相应纬度和长度的温度数据,以及具有每小时频率的时间。所以我做了如下的编码 np.random.seed(123) temperature_3d = 15 + 10 * np.random.randn(24,4,4) # 3-dimensional lat = np.random.uniform(low=-90, high=90, size=(1,4)) lon = np.random.uniform(low=-180, high=180, size=(

我想创建一个三维数据数组,它存储具有相应纬度和长度的温度数据,以及具有每小时频率的时间。所以我做了如下的编码

np.random.seed(123)

temperature_3d = 15 + 10 * np.random.randn(24,4,4)    # 3-dimensional
lat = np.random.uniform(low=-90, high=90, size=(1,4))
lon = np.random.uniform(low=-180, high=180, size=(1,4))

# round to two digits after decimal point
temperature_3d = np.around(temperature_3d, decimals=2)
lat , lon = np.around([lat, lon], decimals=2)
date_rng = pd.date_range(start='1/1/2018T01:00', end='1/2/2018', freq='H')
我得到了这个错误

ValueError: conflicting sizes for dimension 'x': length 24 on the data but length 1 on coordinate 'lat'
维度上是错误的,我可以在不包含时间的情况下修复它,我的目标是创建一个具有720x40x40维度(timexlat,lonxtime)的数据数组


我也是这类图书馆的新手。因此,我将非常感谢您的建议。

看起来形状需要正确匹配

首先,由于您的温度数据是形状(24,4,4)

您需要在DIM中首先输入日期:

da = xr.DataArray(data=temperature_3d,
              coords={"lat": (["x","y"], lat),
                      "lon": (["x","y"], lon), 
                      "day": date_rng},
              dims=["day","x","y"])
其次,你的lat和lon坐标有一个符合[“x”,“y”]的形状,因此在本例中,你需要一个4x4网格来表示每个点的lat,另一个4x4网格用于表示每个点的lon。为此,我们可以使用np.meshgrid:

latgrid, longrid = np.meshgrid(lat,lon)
因此,全文如下:

import numpy as np
import xarray as xa

np.random.seed(123)

temperature_3d = 15 + 10 * np.random.randn(24,4,4)    # 3-dimensional
lat = np.random.uniform(low=-90, high=90, size=(4))
lon = np.random.uniform(low=-180, high=180, size=(4))

# round to two digits after decimal point
temperature_3d = np.around(temperature_3d, decimals=2)
lat , lon = np.around([lat, lon], decimals=2)
latgrid, longrid = np.meshgrid(lat,lon)
date_rng = pd.date_range(start='1/1/2018T01:00', end='1/2/2018', freq='H')

da = xa.DataArray(data=temperature_3d,
              coords={"lat": (["x","y"], latgrid),
                      "lon": (["x","y"], longrid), 
                      "day": date_rng},
              dims=["day","x","y"])
da
latgrid, longrid = np.meshgrid(lat,lon)
import numpy as np
import xarray as xa

np.random.seed(123)

temperature_3d = 15 + 10 * np.random.randn(24,4,4)    # 3-dimensional
lat = np.random.uniform(low=-90, high=90, size=(4))
lon = np.random.uniform(low=-180, high=180, size=(4))

# round to two digits after decimal point
temperature_3d = np.around(temperature_3d, decimals=2)
lat , lon = np.around([lat, lon], decimals=2)
latgrid, longrid = np.meshgrid(lat,lon)
date_rng = pd.date_range(start='1/1/2018T01:00', end='1/2/2018', freq='H')

da = xa.DataArray(data=temperature_3d,
              coords={"lat": (["x","y"], latgrid),
                      "lon": (["x","y"], longrid), 
                      "day": date_rng},
              dims=["day","x","y"])
da