Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Xarray创建多个光栅?_Python_Pandas_Numpy_Python Xarray - Fatal编程技术网

Python 如何使用Xarray创建多个光栅?

Python 如何使用Xarray创建多个光栅?,python,pandas,numpy,python-xarray,Python,Pandas,Numpy,Python Xarray,我一直在尝试将几个netCDF文件相乘,以进行就地计算,例如光栅相乘,但我不断得到不同的错误,我希望能得到一些帮助 我的乐队有以下信息(为了清晰起见,忽略属性,如果需要,我可以添加): 这很奇怪,因为我们使用的是一个安装了256GB内存的系统,即使在尝试或只使用了一个频段之后,错误消息也没有改变 然后,考虑到可能是因为名字不同,我们改变了乐队的名字,但这也没用。要尝试确保它们也有相同的类型(那些,float32和float64应该仍然可以正常工作?) 我们还尝试应用挤压函数来减少维度总数(可能需

我一直在尝试将几个netCDF文件相乘,以进行就地计算,例如光栅相乘,但我不断得到不同的错误,我希望能得到一些帮助

我的乐队有以下信息(为了清晰起见,忽略属性,如果需要,我可以添加):

这很奇怪,因为我们使用的是一个安装了256GB内存的系统,即使在尝试或只使用了一个频段之后,错误消息也没有改变

然后,考虑到可能是因为名字不同,我们改变了乐队的名字,但这也没用。要尝试确保它们也有相同的类型(那些,
float32
float64
应该仍然可以正常工作?)

我们还尝试应用
挤压
函数来减少维度总数(可能需要验证,因为我的同事处理的不是我),但这是弹出给我的错误消息:

>>> precipitation_slice_squeeze = precipitation_slice.squeeze()
>>> precipitation_slice_squeeze

<xarray.DataArray 'prAdjust' (lat: 360, lon: 720)>
dask.array<getitem, shape=(360, 720), dtype=float32, chunksize=(360, 720), chunktype=numpy.ndarray>
Coordinates:
  * lon      (lon) float32 -179.75 -179.25 -178.75 ... 178.75 179.25 179.75
  * lat      (lat) float32 -89.75 -89.25 -88.75 -88.25 ... 88.75 89.25 89.75
    time     datetime64[ns] 2019-01-01T12:00:00

>>> precipitation_slice_squeeze * wsxr_renamed_squeeze

ValueError: zero-size array to reduction operation minimum which has no identity
降水量切片挤压=降水量切片挤压() >>>沉淀、切片、挤压 dask阵列 协调: *lon(lon)浮动32-179.75-179.25-178.75。。。178.75 179.25 179.75 *lat浮动32-89.75-89.25-88.75-88.25。。。88.75 89.25 89.75 时间日期时间64[ns]2019-01-01T12:00:00 >>>沉淀\u切片\u挤压*wsxr\u重命名\u挤压 ValueError:零大小数组到没有标识的最小缩减操作
很明显,我们在做一些非常错误的事情。我们对XArray相当陌生,对他们没有太多经验。我们的主要目标是执行就地光栅计算,因此任何和所有的帮助将不胜感激

shape(1827、360、720、12160、500)的容量高达465TB,这在许多超级计算机中很难找到。这对
precds
tempds
的乘法有效的原因是它们具有相同的维度。对于
wsxr
,情况并非如此,它显然在x,y数据中包含某种latlon子网格值。您需要至少添加一些关于您希望通过这些数据集和多应用程序实现什么的信息。好的,您建议我如何更改wsrx的维度以解决此问题?这取决于您希望实现什么。直到现在,我都不知道你想做什么。所以我只是猜测:你有30弧分(0.5度分辨率)的降水/温度数据,你的
precds
/
tempds
-数据集。然后您就有了一些
wsxr
数据集,它以5弧分(0.083333度)的分辨率表示拉特伦坐标。问题是:您希望输出结果是什么?好的,基本上是qgis的光栅代数,但它适用于大量波段。将波段wsxr与其每个时间段的Tempd相乘。我的目的是让每个ppt rasterNot sure的各个乐团对答案进行加权,如果这是您想要的。但是,如果希望输出的分辨率为5弧分,则需要对源数据集进行插值。大致如下:
ds\u interp=tempds.interp(lat=wsxr.y,lon=wsxr.x)
>>> wsxr

<xarray.DataArray (band: 1, y: 2160, x: 4320)>
[9331200 values with dtype=float32]
Coordinates:
  * band     (band) int64 1
  * y        (y) float64 89.96 89.87 89.79 89.71 ... -89.71 -89.79 -89.88 -89.96
  * x        (x) float64 -180.0 -179.9 -179.8 -179.7 ... 179.7 179.8 179.9 180.0
>>> tempds

<xarray.Dataset>
Dimensions:    (bnds: 2, lat: 360, lon: 720, time: 1827)
Coordinates:
  * lon        (lon) float32 -179.75 -179.25 -178.75 ... 178.75 179.25 179.75
  * lat        (lat) float32 -89.75 -89.25 -88.75 -88.25 ... 88.75 89.25 89.75
  * time       (time) datetime64[ns] 2016-01-01T12:00:00 ... 2020-12-31T12:00:00
Dimensions without coordinates: bnds
Data variables:
    time_bnds  (time, bnds) datetime64[ns] dask.array<chunksize=(10, 2), meta=np.ndarray>
    tasAdjust  (time, lat, lon) float32 dask.array<chunksize=(10, 360, 720), meta=np.ndarray>
    height     float64 ...
>>> multiplied = precds_var1 * cotton_dask500_ds
>>> multiplied.to_netcdf('multiplied.nc')

Error:
MemoryError: Unable to allocate array with shape (1827, 360, 720, 1, 2160, 500) and data type float32
>>> precipitation_slice_squeeze = precipitation_slice.squeeze()
>>> precipitation_slice_squeeze

<xarray.DataArray 'prAdjust' (lat: 360, lon: 720)>
dask.array<getitem, shape=(360, 720), dtype=float32, chunksize=(360, 720), chunktype=numpy.ndarray>
Coordinates:
  * lon      (lon) float32 -179.75 -179.25 -178.75 ... 178.75 179.25 179.75
  * lat      (lat) float32 -89.75 -89.25 -88.75 -88.25 ... 88.75 89.25 89.75
    time     datetime64[ns] 2019-01-01T12:00:00

>>> precipitation_slice_squeeze * wsxr_renamed_squeeze

ValueError: zero-size array to reduction operation minimum which has no identity