metpy.calc.advection TypeError:无效的索引器数组

当我计划从数组数据集计算温度对流时, 出现错误:

TypeError:无效的索引器数组,没有整数dtype:array(None,dtype = object)

示例:我读取了WRF输出,并且xarray数据数组为:


xarray.DataArray'ua'(时间:365南北:156west_east:108)

坐标:

XLONG(南北,西东)float32 ...

XLAT(南北,西东)float32 ...

interp_level()float64 850.0

时间(Time)对象1997-01-01 00:00:00 ...


我跑步

lats=slp_yr_ds.XLAT.data
lons=slp_yr_ds.XLONG.data
dx,dy=mpcalc.lat_lon_grid_deltas(lons,lats)

tadv_850=mpcalc.advection(ta,(ua,va),(dx,dy),dim_order='yx')

错误消息是:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-52-23d8c16fd3c0> in <module>
      1 #tadv_850=mpcalc.advection(ta[0,:,:],(ua[0,va[0,:]),dim_order='yx')
----> 2 tadv_850=mpcalc.advection(ta,dy))

./software/anaconda3/envs/work/lib/python3.7/site-packages/metpy/xarray.py in wrapper(*args,**kwargs)
    675         kwargs = {name: (v.metpy.unit_array if isinstance(v,xr.DataArray) else v)
    676                   for name,v in kwargs.items()}
--> 677         return func(*args,**kwargs)
    678     return wrapper
    679 

./software/anaconda3/envs/work/lib/python3.7/site-packages/metpy/calc/kinematics.py in wrapper(dim_order,*args,**kwargs)
     56                 kwargs[k] = _check_and_flip(v)
     57 
---> 58         ret = func(*args,**kwargs)
     59 
     60         # If we flipped on the way in,need to flip on the way out so that output array(s)

./software/anaconda3/envs/work/lib/python3.7/site-packages/metpy/calc/kinematics.py in advection(scalar,wind,deltas)
    315     """
    316     # This allows passing in a list of wind components or an array.
--> 317     wind = _stack(wind)
    318 
    319     # If we have more than one component,we need to reverse the order along the first

./software/anaconda3/envs/work/lib/python3.7/site-packages/metpy/calc/kinematics.py in _stack(arrs)
     20 
     21 def _stack(arrs):
---> 22     return concatenate([a[np.newaxis] if iterable(a) else a for a in arrs],axis=0)
     23 
     24 

./software/anaconda3/envs/work/lib/python3.7/site-packages/metpy/calc/kinematics.py in <listcomp>(.0)
     20 
     21 def _stack(arrs):
---> 22     return concatenate([a[np.newaxis] if iterable(a) else a for a in arrs],axis=0)
     23 
     24 

./software/anaconda3/envs/work/lib/python3.7/site-packages/xarray/core/dataarray.py in __getitem__(self,key)
    629         else:
    630             # xarray-style array indexing
--> 631             return self.isel(indexers=self._item_key_to_dict(key))
    632 
    633     def __setitem__(self,key: Any,value: Any) -> None:

./software/anaconda3/envs/work/lib/python3.7/site-packages/xarray/core/dataarray.py in isel(self,indexers,drop,**indexers_kwargs)
   1004         indexers = either_dict_or_kwargs(indexers,indexers_kwargs,"isel")
   1005         if any(is_fancy_indexer(idx) for idx in indexers.values()):
-> 1006             ds = self._to_temp_dataset()._isel_fancy(indexers,drop=drop)
   1007             return self._from_temp_dataset(ds)
   1008 

./software/anaconda3/envs/work/lib/python3.7/site-packages/xarray/core/dataset.py in _isel_fancy(self,drop)
   1972             if name in self.indexes:
   1973                 new_var,new_index = isel_variable_and_index(
-> 1974                     name,var,self.indexes[name],var_indexers
   1975                 )
   1976                 if new_index is not None:

/./software/anaconda3/envs/work/lib/python3.7/site-packages/xarray/core/indexes.py in isel_variable_and_index(name,variable,index,indexers)
     99         )
    100 
--> 101     new_variable = variable.isel(indexers)
    102 
    103     if new_variable.dims != (name,):

./software/anaconda3/envs/work/lib/python3.7/site-packages/xarray/core/variable.py in isel(self,**indexers_kwargs)
   1058 
   1059         key = tuple(indexers.get(dim,slice(None)) for dim in self.dims)
-> 1060         return self[key]
   1061 
   1062     def squeeze(self,dim=None):

./software/anaconda3/envs/work/lib/python3.7/site-packages/xarray/core/variable.py in __getitem__(self,key)
    701         array `x.values` directly.
    702         """
--> 703         dims,indexer,new_order = self._broadcast_indexes(key)
    704         data = as_indexable(self._data)[indexer]
    705         if new_order:

./software/anaconda3/envs/work/lib/python3.7/site-packages/xarray/core/variable.py in _broadcast_indexes(self,key)
    547         # key can be mapped as an OuterIndexer.
    548         if all(not isinstance(k,Variable) for k in key):
--> 549             return self._broadcast_indexes_outer(key)
    550 
    551         # If all key is 1-dimensional and there are no duplicate labels,./software/anaconda3/envs/work/lib/python3.7/site-packages/xarray/core/variable.py in _broadcast_indexes_outer(self,key)
    623             new_key.append(k)
    624 
--> 625         return dims,OuterIndexer(tuple(new_key)),None
    626 
    627     def _nonzero(self):

./software/anaconda3/envs/work/lib/python3.7/site-packages/xarray/core/indexing.py in __init__(self,key)
    403                 if not np.issubdtype(k.dtype,np.integer):
    404                     raise TypeError(
--> 405                         f"invalid indexer array,does not have integer dtype: {k!r}"
    406                     )
    407                 if k.ndim != 1:

TypeError: invalid indexer array,does not have integer dtype: array(None,dtype=object)


向你致敬

h286700143game 回答:metpy.calc.advection TypeError:无效的索引器数组

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2439857.html

大家都在问