[英]xarray dropping elements along a sliced dimension
我正在使用 xarray 讀取 NetCDF(時間、水平、緯度、經度)文件。 我正在選擇兩個大小相同的切片。 我想知道何時添加這兩個文件。
生成的文件沒有給出正確的尺寸。
slice1 -> (72, 22 , 41, 36)
slice2 -> (72, 22 , 41, 36)
結果 -> (72, 21 , 41, 36)
怎么了?
這是我正在使用的代碼
import xarray as xr
fname = "DJF_uvwq_lev_monhourly_2017.nc"
ds = xr.open_dataset(fname)
u = ds['u']
level = ds['level']
a = u.isel(level=slice(0, len(plev)-1))
b = u.isel(level=slice(1, len(plev)))
fluxInterp = a + b
print(np.shape(a))
print(np.shape(b))
print(np.shape(fluxInterp))
與 numpy 根據數組中的位置對齊數據不同,xarray 在執行數據操作時使用沿給定維度的標簽來對齊數據。 因此,在水平維度的a
和b
的情況下具有偏移標簽不會執行您期望的方式。
設置一個虛擬示例:
In [1]: import xarray as xr, pandas as pd, numpy as np
In [2]: u = xr.DataArray(np.arange(5), dims=['level'], coords=[list('abcde')])
In [3]: u
Out[3]:
<xarray.DataArray (level: 5)>
array([0, 1, 2, 3, 4])
Coordinates:
* level (level) <U1 'a' 'b' 'c' 'd' 'e'
在您的示例中查看 a 和 b 時,您正在使用偏移量( slice(0, length-1)
vs slice(1, length)
)對數據進行slice(0, length-1)
。 執行此操作時,請注意“級別”的索引不再對齊:
In [4]: a = u.isel(level=slice(0, len(u.level)- 1))
...: b = u.isel(level=slice(1, len(u.level)))
In [5]: a
Out[5]:
<xarray.DataArray (level: 4)>
array([0, 1, 2, 3])
Coordinates:
* level (level) <U1 'a' 'b' 'c' 'd'
In [6]: b
Out[6]:
<xarray.DataArray (level: 4)>
array([1, 2, 3, 4])
Coordinates:
* level (level) <U1 'b' 'c' 'd' 'e'
當添加兩者時,或在任何涉及廣播和自動對齊的操作中(請參閱下面的文檔參考),缺失值將從結果中刪除。 此外,在結果中,請注意總和是元素總和,其中每個元素根據標簽 (b + b, c + c, d + d) 對齊,而不是基於位置 (b + a, c + b , d + c)。
In [7]: a + b
Out[7]:
<xarray.DataArray (level: 3)>
array([2, 4, 6])
Coordinates:
* level (level) <U1 'b' 'c' 'd'
您要尋找的是首先使用shift
方法移動軸標簽,以便在添加之前對齊坐標標簽:
In [10]: c = u.shift(level=-1)
In [11]: c
Out[11]:
<xarray.DataArray (level: 5)>
array([ 1., 2., 3., 4., nan])
Coordinates:
* level (level) <U1 'a' 'b' 'c' 'd' 'e'
In [12]: a + c
Out[12]:
<xarray.DataArray (level: 4)>
array([1., 3., 5., 7.])
Coordinates:
* level (level) <U1 'a' 'b' 'c' 'd'
現在,當您在a + c
添加時,坐標以您想要的方式排列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.