У меня немного неприятностей Применение моего кода с других месяцев до февраля. < /p>
Вот мой код за 31 день: < /p>
Код: Выделить всё
import xarray as xr
import numpy as np
import copernicusmarine
DS = copernicusmarine.open_dataset(dataset_id="cmems_mod_glo_phy_my_0.083deg_P1D-m", minimum_longitude = -1.68, maximum_longitude = -1.56, minimum_latitude = 49.63, maximum_latitude = 49.67, minimum_depth = 0, maximum_depth = 0)
var_arr = np.zeros((341,len(DS['depth']),len(DS['latitude']),len(DS['longitude'])))
ind_time = -1
for y in range(2010,2021):
ind_time += 1
print(y)
start_rangedate = "%s"%y+"-01-01"
end_rangedate = "%s"%y+"-01-31"
subset_thetao = DS.thetao.sel(time = slice(start_rangedate, end_rangedate))
var_arr[31*ind_time:31*(ind_time+1),:,:,:] = subset_thetao.data
minimum = np.nanmin(var_arr)
print(minimum)
moyenne = np.mean(var_arr)
print(moyenne)
maximum = np.nanmax(var_arr)
print(maximum)
# 31 * 11 (years) = 341
< /code>
он работает хорошо. < /p>
для февраля я впервые попробовал это: < /p>
DS = copernicusmarine.open_dataset(dataset_id="cmems_mod_glo_phy_my_0.083deg_P1D-m", minimum_longitude = -1.68, maximum_longitude = -1.56, minimum_latitude = 49.63, maximum_latitude = 49.67, minimum_depth = 0, maximum_depth = 0)
years_feb_28 = [2010,2011,2013,2014,2015,2017,2018,2019]
years_feb_29 = [2012,2016,2020]
var_arr = np.zeros((311,len(DS['depth']),len(DS['latitude']),len(DS['longitude'])))
ind_time_28 = -1
ind_time_29 = -1
for y in range(2010,2021):
print(y)
start_rangedate = "%s"%y+"-02-01"
if y in years_feb_28:
ind_time_28 += 1
end_rangedate = "%s"%y+"-02-28"
subset_thetao1 = DS.thetao.sel(time = slice(start_rangedate, end_rangedate))
var_arr[28*ind_time_28:28*(ind_time_28+1),:,:,:] = subset_thetao1.data
if y in years_feb_29:
ind_time_29 += 1
end_rangedate = "%s"%y+"-02-29"
subset_thetao2 = DS.thetao.sel(time = slice(start_rangedate, end_rangedate))
var_arr[29*ind_time_29:29*(ind_time_29+1),:,:,:] = subset_thetao2.data
minimum = np.nanmin(var_arr)
print(minimum)
maximum = np.nanmax(var_arr)
print(maximum)
moyenne = np.mean(var_arr)
print(moyenne)
# (8 x 28) + (3 x 29) = 311
< /code>
это работает, но значения кажутся неверными для меня. < /p>
Результат: < /p>
minimum : 0.0
mean : 10.118808567523956
maximum :6.510576634161725
< /code>
Я попробовал с одним ind_time. < /p>
DS = copernicusmarine.open_dataset(dataset_id="cmems_mod_glo_phy_my_0.083deg_P1D-m", minimum_longitude = -1.68, maximum_longitude = -1.56, minimum_latitude = 49.63, maximum_latitude = 49.67, minimum_depth = 0, maximum_depth = 0)
years_feb_28 = [2010,2011,2013,2014,2015,2017,2018,2019]
years_feb_29 = [2012,2016,2020]
var_arr = np.zeros((311,len(DS['depth']),len(DS['latitude']),len(DS['longitude'])))
ind_time = -1
for y in range(2010,2021):
print(y)
start_rangedate = "%s"%y+"-02-01"
if y in years_feb_28:
ind_time += 1
end_rangedate = "%s"%y+"-02-28"
subset_thetao1 = DS.thetao.sel(time = slice(start_rangedate, end_rangedate))
var_arr[28*ind_time:28*(ind_time+1),:,:,:] = subset_thetao1.data
if y in years_feb_29:
ind_time += 1
end_rangedate = "%s"%y+"-02-29"
subset_thetao2 = DS.thetao.sel(time = slice(start_rangedate, end_rangedate))
var_arr[29*ind_time:29*(ind_time+1),:,:,:] = subset_thetao2.data
minimum = np.nanmin(var_arr)
print(minimum)
maximum = np.nanmax(var_arr)
print(maximum)
moyenne = np.mean(var_arr)
print(moyenne)
< /code>
Но я получаю это сообщение об ошибке без понимания, откуда поступает значение 21 от: < /p>
Cell In[7], line 38
var_arr[29*ind_time:29*(ind_time+1),:,:,:] = subset_thetao2.data
ValueError: could not broadcast input array from shape (29,1,1,2) into shape (21,1,1,2)
< /code>
Кто-то сказал мне, что принятые во внимание данные могут остановиться на 02-28 гг. 00:00:00 (в течение 29 дней) и что код не учитывает последний день. Поэтому я попытался расширить End_Rangedate на год-03-01, но я понимаю: < /p>
Cell In[8], line 33
var_arr[28*ind_time:28*(ind_time+1),:,:,:] = subset_thetao1.data
ValueError: could not broadcast input array from shape (29,1,1,2) into shape (28,1,1,2)
Подробнее здесь: https://stackoverflow.com/questions/793 ... a-for-febr