当我打算从数组数据集计算温度平流时,出现了一个错误:
TypeError:无效的索引器数组,没有整数 dtype:array(None, dtype=object)
示例:我读取 WRF 输出,xarray 数据数组是:
xarray.DataArray'ua' (时间: 365south_north: 156west_east: 108)
坐标:
XLONG (south_north, west_east) float32 ...
XLAT (south_north, west_east) 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,0,:,:], (ua[0,0,:,:],va[0,0,:,:]),(dx,dy),dim_order='yx')
----> 2 tadv_850=mpcalc.advection(ta, (ua,va),(dx,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, indexers, 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, **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)
谢谢你