Рассчитайте ежемесячный минимальный, средний и максимальный при ежедневных данных о температуре за февраль с PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Рассчитайте ежемесячный минимальный, средний и максимальный при ежедневных данных о температуре за февраль с Python

Сообщение Anonymous »

Я довольно новичок в Python, и я пытаюсь рассчитать минимальную, среднюю и максимальную ежемесячную температуру по ежедневным данным за февраль. < /p>
У меня немного неприятностей Применение моего кода с других месяцев до февраля. < /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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»