Я пытаюсь рассчитать центр масс полей осадков по своим данным наблюдений (формат .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
TypeError: 'numpy.float64' object is not iterable
? Обычно это означает, что вы пытаетесь выполнить итерацию по списку/итерируемому объекту, но объект, который вы передали, выглядит как один float64. - person PeptideWitch   schedule 15.08.2019obsv
может быть не тем 2D-массивом, который вы ожидаете. Можете ли вы сделать быструю проверку печати:print(obsv)
илиprint(obsv.shape)
, чтобы увидеть, что это такое? - person PeptideWitch   schedule 15.08.2019print(obsv.shape)
дает результат(180, 270)
. Когда я делаюprint (obsv)
, он говорит:<xarray.DataArray 'rain_total' (lat: 180, lon: 270)>
сdtype=float32
Я изначально сказал (90, 180), но я не думал, что это выдаст мне сообщение об ошибке. - person a_sircar   schedule 15.08.2019CoM_obsv = ndimage.measurements.center_of_mass(obsv.values)
- person PeptideWitch   schedule 15.08.2019