'numpy.float64' 对于 Scipy 函数质心不可迭代



我一直在尝试从我的观测数据(.nc格式(中计算降水场的质心,但我不断收到错误消息:"TypeError: 'numpy.float64' object is not iterable"

我已经设法将我的netcdf文件从.nc转换为xarray数据集,然后提取值以给出一个(1, 90,180(数组,然后将其转换为(90,180(以实现其他功能。然后我尝试计算数组的质心,但它一直给我一条错误消息。

from scipy import ndimage
ncobsdata = Dataset('/home/data/20180380293.nc', mode = 'r')
obsdata = xr.open_dataset(xr.backends.NetCDF4DataStore(ncobsdata))
obs = obsdata.rain_total #shape = (1, 90, 180)
obsv = np.squeeze(obs) #I had to do this step to make it (90, 180)
CoM_obsv = ndimage.measurements.center_of_mass(obsv)

我希望得到质心结果,但我只是不断收到错误消息:

File "_____.py", line 10, in <module>
CoM_obsv = ndimage.measurements.center_of_mass(obsv)
File "________/scipy/ndimage/measurements.py", line 1289, in center_of_mass
return [tuple(v) for v in numpy.array(results).T]
TypeError: 'numpy.float64' object is not iterable

所以这里发生的事情是obsobsv变量都存储为 xarray。DataArrays - 这个类是常规 numpy 数组的包装器。要访问底层 np.ndarray,您需要从对象调用值:

CoM_obsv = ndimage.measurements.center_of_mass(obsv.values)

请注意,您不需要为obsv = np.squeeze(obs) #I had to do this step to make it (90, 180)执行此操作,因为已经有可用于 xarray 的挤压方法。数据数组。

最新更新