Browse Source

Completed data preprocessing script commenting

FGeo 1 year ago
parent
commit
671cea448d
  1. 331
      0_prepare_data.ipynb

331
0_prepare_data.ipynb

@ -18,7 +18,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 2, "execution_count": null,
"id": "7b2a7f44-b0cb-4471-a0c6-e56da23caf86", "id": "7b2a7f44-b0cb-4471-a0c6-e56da23caf86",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
@ -29,9 +29,17 @@
"import pandas as pd" "import pandas as pd"
] ]
}, },
{
"cell_type": "markdown",
"id": "6b2b903f-fa30-4e35-97e1-74bc0ee6b944",
"metadata": {},
"source": [
"### Helper variables"
]
},
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 3, "execution_count": null,
"id": "36b9f49e-32e6-4544-a9d3-f6a8ba49d867", "id": "36b9f49e-32e6-4544-a9d3-f6a8ba49d867",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
@ -41,29 +49,29 @@
"src_path = \"../shared_files/eee_public_files/seasonal-variation-2024/\"" "src_path = \"../shared_files/eee_public_files/seasonal-variation-2024/\""
] ]
}, },
{
"cell_type": "markdown",
"id": "5e16ee8e-f3b0-4251-9691-19d7dfd4aff7",
"metadata": {},
"source": [
"### Preprocessing WRF T2m data"
]
},
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 4, "execution_count": null,
"id": "78a4350c-59fb-479a-b7cd-e2bf9b996d36", "id": "78a4350c-59fb-479a-b7cd-e2bf9b996d36",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"# available numbers of simulated days for analysis\n", "# used numbers of simulated days for analysis\n",
"wrf_N_days = 4992\n", "wrf_N_days = 4992\n",
"inmcm_N_days = 3650" "inmcm_N_days = 3650"
] ]
}, },
{
"cell_type": "markdown",
"id": "5e16ee8e-f3b0-4251-9691-19d7dfd4aff7",
"metadata": {},
"source": [
"### Preprocessing WRF T2m data"
]
},
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 5, "execution_count": null,
"id": "53cb9cc3-0e56-4da4-920b-2f071a0846fb", "id": "53cb9cc3-0e56-4da4-920b-2f071a0846fb",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
@ -81,51 +89,48 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 147, "execution_count": null,
"id": "0e4d0268-208f-45c7-bb0a-b5e8d3c7c1f7", "id": "0e4d0268-208f-45c7-bb0a-b5e8d3c7c1f7",
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [],
{
"data": {
"text/plain": [
"(4992, 180, 360)"
]
},
"execution_count": 147,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [ "source": [
"wrf_T2_data = np.load(f\"{src_path}/T2-MAP-FULL.npy\")[:wrf_N_days]\n", "# air temperature at the height of 2 m with the shape\n",
"wrf_T2_data.shape" "# (number of days, number of latitudes, number of longitudes)\n",
"\n",
"# contains temperature values depending on (d, lat, lon)\n",
"\n",
"# d (axis 0) is the number of a day starting with 0 and ending with 5113\n",
"# every third day is taken\n",
"# d = 0 corresponds to 1 Jan 1980, d = 5113 corresponds to 30 Dec 2021\n",
"# d = 4991 corresponds to 29 Dec 2020\n",
"# (we will restrict our attention to 1980–2020)\n",
"\n",
"# lat (axis 2) describes the latitude (an integer in [0, 179])\n",
"\n",
"# lon (axis 3) describes the longitude (an integer in [0, 359])\n",
"\n",
"wrf_T2_data = np.load(f\"{src_path}/T2-MAP-FULL.npy\")[:wrf_N_days]"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 149, "execution_count": null,
"id": "ec569ffd-93c2-4490-8ba1-69af4fab8f23", "id": "ec569ffd-93c2-4490-8ba1-69af4fab8f23",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"# mean surface air temperature values for different latitudes and months\n", "# air temperature averaged over latitudes and months\n",
"wrf_mon_T2 = np.zeros((180, 12))\n", "wrf_mon_T2 = np.zeros((180, 12))\n",
"\n", "\n",
"for month_idx in range(12):\n", "for month_idx in range(12):\n",
" # filter indicies by month number\n",
" monthly_indicies = [\n", " monthly_indicies = [\n",
" i for i, date in enumerate(wrf_dt_indicies) if date.month == month_idx + 1\n", " i for i, date in enumerate(wrf_dt_indicies) if date.month == month_idx + 1\n",
" ] # indicies of days available for `month_idx+1` month\n", " ]\n",
"\n",
" # putting values at specific month into averaged array\n",
" wrf_mon_T2[:, month_idx] = wrf_mean_T2[monthly_indicies].mean(axis=0)\n",
"\n", "\n",
" wrf_mon_T2[:, month_idx] = wrf_mean_T2[monthly_indicies].mean(axis=0)"
]
},
{
"cell_type": "code",
"execution_count": 164,
"id": "08302aa4-cb14-47f9-8216-a9db06ae53ef",
"metadata": {},
"outputs": [],
"source": [
"np.save(f\"./data/WRF/WRF_T2_LATxMON.npy\",wrf_mon_T2)" "np.save(f\"./data/WRF/WRF_T2_LATxMON.npy\",wrf_mon_T2)"
] ]
}, },
@ -139,102 +144,123 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 72, "execution_count": null,
"id": "94a603c3-982d-4c78-be1c-bb6c74b86b5b", "id": "94a603c3-982d-4c78-be1c-bb6c74b86b5b",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"# dictionaries where processed data is saved\n",
"# the dictionary keys represent the threshold value of CAPE\n",
"\n",
"# for storing arrays with averaged by hours and summarized by longitude,\n",
"# i.e. with dimensions (4992, 180) for WRF and (3650, 120) for INMCM\n",
"wrf_daily_latitudal_ip = {}\n", "wrf_daily_latitudal_ip = {}\n",
"inmcm_daily_latitudal_ip = {}\n", "inmcm_daily_latitudal_ip = {}\n",
"\n", "\n",
"# for storing arrays summarized by longitude and latitude,\n",
"# i.e. with dimensions (4992, 24) for WRF and (3650, 24) for INMCM\n",
"wrf_hourly_total_ip = {}\n", "wrf_hourly_total_ip = {}\n",
"inmcm_hourly_total_ip = {}" "inmcm_hourly_total_ip = {}"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 73, "execution_count": null,
"id": "d8e43c4f-59af-483c-8979-535c696abb4e", "id": "d8e43c4f-59af-483c-8979-535c696abb4e",
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [],
{
"name": "stdout",
"output_type": "stream",
"text": [
"800\n",
"1000\n",
"1200\n"
]
}
],
"source": [ "source": [
"for cape_thres in [800, 1000, 1200]: # J/kg\n", "# iterating over the CAPE threshold (J/kg) values used in modeling \n",
" print(cape_thres)\n", "# for each threshold, there are corresponding model datasets\n",
"for cape_thres in [800, 1000, 1200]:\n",
"\n", "\n",
" # grid cell contributions to the IP (not normalised) with the shape\n", " # grid cell contributions to the IP (not normalised) with the shape\n",
" # (number of days, number of hours, number of latitudes, number of longitudes)\n", " # (number of days, number of hours, number of latitudes, number of longitudes)\n",
" wrf_raw_ip_data = np.load(f\"{src_path}/WRF-IP-MAP-{cape_thres}.npy\")[:wrf_N_days]\n", " wrf_raw_ip_data = np.load(f\"{src_path}/WRF-IP-MAP-{cape_thres}.npy\")[:wrf_N_days]\n",
" # modelled using WRF model with CAPE threshold = `cape_thres` J/kg\n",
" # contains values of contributions to the IP depending on (d, h, lat, lon)\n",
" # d (axis 0) is the number of a day starting with 0 and ending with 5113\n",
" # every third day is taken\n",
" # d = 0 corresponds to 1 Jan 1980, \n",
" # d = 5113 corresponds to 30 Dec 2021\n",
" # d = 4991 corresponds to 29 Dec 2020\n",
" # (we will restrict our attention to 1980–2020)\n",
" # h (axis 1) is the hour of the day (an integer in [0, 24])\n",
" # the values corresponding to h = 0 and h = 24 are the same\n",
" # lat (axis 2) describes the latitude (an integer in [0, 179]) \n",
" # lon (axis 3) describes the longitude (an integer in [0, 359])\n",
"\n",
" # discarding the last hour, which duplicates the first one\n",
" wrf_raw_ip_data = wrf_raw_ip_data[:, :24, :, :]\n", " wrf_raw_ip_data = wrf_raw_ip_data[:, :24, :, :]\n",
" \n",
" # normalisation of contributions to the IP to the global mean of 240 kV\n",
" wrf_raw_ip_data /= (1/240e3) * wrf_raw_ip_data.sum(axis=(-2,-1)).mean()\n", " wrf_raw_ip_data /= (1/240e3) * wrf_raw_ip_data.sum(axis=(-2,-1)).mean()\n",
"\n", "\n",
" # filling dictionaries with averaged arrays\n",
" wrf_daily_latitudal_ip[cape_thres] = wrf_raw_ip_data.mean(axis=1).sum(axis=-1)\n", " wrf_daily_latitudal_ip[cape_thres] = wrf_raw_ip_data.mean(axis=1).sum(axis=-1)\n",
" wrf_hourly_total_ip[cape_thres] = wrf_raw_ip_data.sum(axis=(-2, -1))\n", " wrf_hourly_total_ip[cape_thres] = wrf_raw_ip_data.sum(axis=(-2, -1))\n",
"\n", "\n",
" inmcm_raw_ip_data = np.load(f\"{src_path}/INMCM-IP-MAP-{cape_thres}.npy\").reshape((inmcm_N_days, 24, 120, 180))\n", " np.save(f\"./data/WRF/WRF_HOURLY_TOTAL_IP_{cape_thres}.npy\",\n",
" wrf_hourly_total_ip[cape_thres])\n",
"\n",
" # grid cell contributions to the IP (not normalised) reshaped to\n",
" # (number of days, number of hours, number of latitudes, number of longitudes)\n",
" inmcm_raw_ip_data = np.load(f\"{src_path}/INMCM-IP-MAP-{cape_thres}.npy\")\\\n",
" .reshape((inmcm_N_days, 24, 120, 180))\n",
" # modelled using INMCM model with CAPE threshold = `cape_thres` J/kg\n",
" # contains values of contributions to the IP depending on (d, h, lat, lon)\n",
" # d (axis 0) is the number of a day (not correspond to real days,\n",
" # 10 consecutive 365-day years have been simulated)\n",
" # h (axis 1) is the hour of the day (an integer in [0, 23])\n",
" # lat (axis 2) describes the latitude (an integer in [0, 179]) \n",
" # lon (axis 3) describes the longitude (an integer in [0, 359])\n",
"\n",
" # normalisation of contributions to the IP to the global mean of 240 kV\n",
" inmcm_raw_ip_data /= (1/240e3) * inmcm_raw_ip_data.sum(axis=(-2,-1)).mean()\n", " inmcm_raw_ip_data /= (1/240e3) * inmcm_raw_ip_data.sum(axis=(-2,-1)).mean()\n",
" \n", "\n",
" # filling dictionaries with averaged arrays\n",
" inmcm_daily_latitudal_ip[cape_thres] = inmcm_raw_ip_data.mean(axis=1).sum(axis=-1)\n", " inmcm_daily_latitudal_ip[cape_thres] = inmcm_raw_ip_data.mean(axis=1).sum(axis=-1)\n",
" inmcm_hourly_total_ip[cape_thres] = inmcm_raw_ip_data.sum(axis=(-2, -1))\n", " inmcm_hourly_total_ip[cape_thres] = inmcm_raw_ip_data.sum(axis=(-2, -1))\n",
"\n", "\n",
" del wrf_raw_ip_data\n", " np.save(f\"./data/INMCM/INMCM_HOURLY_TOTAL_IP_{cape_thres}.npy\",\n",
" del inmcm_raw_ip_data" " inmcm_hourly_total_ip[cape_thres])"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 89, "execution_count": null,
"id": "eb28cbc7-eb0a-49be-8cc1-734bba1d06f5", "id": "eb28cbc7-eb0a-49be-8cc1-734bba1d06f5",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"for cape_thres in [800, 1000, 1200]: # J/kg\n", "# iterating over the CAPE threshold (J/kg) values used in modeling \n",
" np.save(\n", "# for each threshold, there are corresponding model datasets\n",
" f\"./data/INMCM/INMCM_HOURLY_TOTAL_IP_{cape_thres}.npy\",\n", "for cape_thres in [800, 1000, 1200]:\n",
" inmcm_hourly_total_ip[cape_thres],\n",
" )\n",
" np.save(\n",
" f\"./data/WRF/WRF_HOURLY_TOTAL_IP_{cape_thres}.npy\",\n",
" wrf_hourly_total_ip[cape_thres],\n",
" )\n",
"\n", "\n",
" # initialization of an arrays to store time-averaged data over months\n",
" wrf_data_LATxMON = np.zeros((180, 12))\n", " wrf_data_LATxMON = np.zeros((180, 12))\n",
" inmcm_data_LATxMON = np.zeros((120, 12))\n", " inmcm_data_LATxMON = np.zeros((120, 12))\n",
"\n", "\n",
" # iteration over month number (starting with 0)\n",
" for month_idx in range(12):\n", " for month_idx in range(12):\n",
" monthly_indicies = [\n",
" i for i, date in enumerate(wrf_dt_indicies) if date.month == month_idx + 1\n",
" ] # indicies of days available for `month_idx+1` month\n",
"\n", "\n",
" wrf_data_MONxLAT[:, month_idx] = wrf_daily_latitudal_ip[cape_thres][monthly_indicies].mean(\n", " # filtering day indices belonging to a specific month\n",
" axis=0\n", " wrf_monthly_indicies = [i for i, date in enumerate(wrf_dt_indicies) \n",
" )\n", " if date.month == month_idx + 1]\n",
" np.save(\n", " inm_monthly_indicies = [i for i, date in enumerate(inmcm_dt_indicies) \n",
" f\"./data/WRF/WRF_IP_{cape_thres}_LATxMON.npy\",\n", " if date.month == month_idx + 1]\n",
" wrf_data_MONxLAT,\n",
" )\n",
"\n", "\n",
" for month_idx in range(12):\n", " # filling with modeling values with a CAPE threshold \n",
" monthly_indicies = [\n", " # averaged over months of the year\n",
" i for i, date in enumerate(inmcm_dt_indicies) if date.month == month_idx + 1\n", " wrf_data_MONxLAT[:, month_idx] = \\\n",
" ] # indicies of days available for `month_idx+1` month\n", " wrf_daily_latitudal_ip[cape_thres][monthly_indicies].mean(axis=0)\n",
"\n", " inmcm_data_LATxMON[:, month_idx] = \\\n",
" inmcm_data_LATxMON[:, month_idx] = inmcm_daily_latitudal_ip[cape_thres][\n", " inmcm_daily_latitudal_ip[cape_thres][monthly_indicies].mean(axis=0)\n",
" monthly_indicies\n", "\n",
" ].mean(axis=0)\n", " np.save(f\"./data/WRF/WRF_IP_{cape_thres}_LATxMON.npy\",\n",
" np.save(\n", " wrf_data_MONxLAT)\n",
" f\"./data/INMCM/INMCM_IP_{cape_thres}_LATxMON.npy\",\n", " np.save(f\"./data/INMCM/INMCM_IP_{cape_thres}_LATxMON.npy\",\n",
" inmcm_data_LATxMON,\n", " inmcm_data_LATxMON)"
" )"
] ]
}, },
{ {
@ -252,10 +278,30 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"# grid cell contributions to the IP (not normalised) reshaped to\n",
"# (number of days, number of hours, number of latitudes, number of longitudes)\n",
"wrf_raw_ip_data = np.load(f\"{src_path}/WRF-IP-MAP-500-T2-25.npy\")[:wrf_N_days]\n", "wrf_raw_ip_data = np.load(f\"{src_path}/WRF-IP-MAP-500-T2-25.npy\")[:wrf_N_days]\n",
"# modelled using WRF model using new parametrization based on\n",
"# CAPE and T2 with corresponding thresholds 500 J/kg and 25°C.\n",
"# contains values of contributions to the IP depending on (d, h, lat, lon)\n",
"# d (axis 0) is the number of a day starting with 0 and ending with 5113\n",
"# every third day is taken\n",
"# d = 0 corresponds to 1 Jan 1980, \n",
"# d = 5113 corresponds to 30 Dec 2021\n",
"# d = 4991 corresponds to 29 Dec 2020\n",
"# (we will restrict our attention to 1980–2020)\n",
"# h (axis 1) is the hour of the day (an integer in [0, 24])\n",
"# the values corresponding to h = 0 and h = 24 are the same\n",
"# lat (axis 2) describes the latitude (an integer in [0, 179]) \n",
"# lon (axis 3) describes the longitude (an integer in [0, 359])\n",
"\n",
"# discarding the last hour, which duplicates the first one\n",
"wrf_raw_ip_data = wrf_raw_ip_data[:, :24, :, :]\n", "wrf_raw_ip_data = wrf_raw_ip_data[:, :24, :, :]\n",
"\n",
"# normalisation of contributions to the IP to the global mean of 240 kV\n",
"wrf_raw_ip_data /= (1/240e3) * wrf_raw_ip_data.sum(axis=(-2,-1)).mean()\n", "wrf_raw_ip_data /= (1/240e3) * wrf_raw_ip_data.sum(axis=(-2,-1)).mean()\n",
"\n", "\n",
"# filling dictionaries with averaged arrays\n",
"wrf_daily_latitudal_ip = wrf_raw_ip_data.mean(axis=1).sum(axis=-1)\n", "wrf_daily_latitudal_ip = wrf_raw_ip_data.mean(axis=1).sum(axis=-1)\n",
"wrf_hourly_total_ip = wrf_raw_ip_data.sum(axis=(-2, -1))\n", "wrf_hourly_total_ip = wrf_raw_ip_data.sum(axis=(-2, -1))\n",
"\n", "\n",
@ -267,27 +313,53 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 45, "execution_count": null,
"id": "17036c19-95f8-40df-a6c9-f8a23cf426f6", "id": "5797fffa-a795-4241-a574-6c95f0195a5d",
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [],
{ "source": [
"name": "stdout", "# iterating over the CAPE threshold (J/kg) values used in modeling \n",
"output_type": "stream", "# for each threshold, there are corresponding model datasets\n",
"text": [ "for cape_thres in [800, 1000, 1200]:\n",
"4992\n" "\n",
" # initialization of an arrays to store time-averaged data over months\n",
" wrf_data_LATxMON = np.zeros((180, 12))\n",
" inmcm_data_LATxMON = np.zeros((120, 12))\n",
"\n",
" # iteration over month number (starting with 0)\n",
" for month_idx in range(12):\n",
"\n",
" # filtering day indices belonging to a specific month\n",
" wrf_monthly_indicies = [i for i, date in enumerate(wrf_dt_indicies) \n",
" if date.month == month_idx + 1]\n",
" inm_monthly_indicies = [i for i, date in enumerate(inmcm_dt_indicies) \n",
" if date.month == month_idx + 1]\n",
"\n",
" # filling with modeling values with a CAPE threshold \n",
" # averaged over months of the year\n",
" wrf_data_MONxLAT[:, month_idx] = \\\n",
" wrf_daily_latitudal_ip[cape_thres][monthly_indicies].mean(axis=0)\n",
" inmcm_data_LATxMON[:, month_idx] = \\\n",
" inmcm_daily_latitudal_ip[cape_thres][monthly_indicies].mean(axis=0)"
] ]
} },
], {
"cell_type": "code",
"execution_count": null,
"id": "17036c19-95f8-40df-a6c9-f8a23cf426f6",
"metadata": {},
"outputs": [],
"source": [ "source": [
"# initialization of a array to store time-averaged data over months\n",
"wrf_data_LATxMON = np.zeros((180, 12))\n", "wrf_data_LATxMON = np.zeros((180, 12))\n",
"\n", "\n",
"# iteration over month number (starting with 0)\n",
"for month_idx in range(12):\n", "for month_idx in range(12):\n",
" monthly_indicies = [\n", " # filtering day indices belonging to a specific month\n",
" i for i, date in enumerate(wrf_dt_indicies) \n", " monthly_indicies = [i for i, date in enumerate(wrf_dt_indicies)\n",
" if date.month == month_idx + 1\n", " if date.month == month_idx + 1]\n",
" ]\n",
"\n", "\n",
" # filling with modeling values averaged over months of the year\n",
" wrf_data_LATxMON[:, month_idx] = \\\n", " wrf_data_LATxMON[:, month_idx] = \\\n",
" wrf_daily_latitudal_ip[monthly_indicies].mean(axis=0)\n", " wrf_daily_latitudal_ip[monthly_indicies].mean(axis=0)\n",
"\n", "\n",
@ -304,47 +376,32 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 48, "execution_count": null,
"id": "6dfdae16-cb07-4580-97ba-414b5b2c1f2b", "id": "894ad630-17a5-4744-907e-a07768ff7848",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"wrf_days = np.array([len([\n", "# saving the number of days for each month\n",
" i for i, date in enumerate(wrf_dt_indicies) \n", "# necessary for correct averaging due to \n",
" if date.month == m + 1\n", "# different numbers of days in different months\n",
" ]) for m in range(12)])\n",
"\n", "\n",
"np.save(f\"./data/WRF/WRF_NUMDAYS_MON.npy\", wrf_days)" "wrf_days = np.array([len([i for i, date in enumerate(wrf_dt_indicies) \n",
] " if date.month == m + 1]) \n",
}, " for m in range(12)])\n",
{ "\n",
"cell_type": "code", "inm_days = np.array([len([i for i, date in enumerate(inmcm_dt_indicies) \n",
"execution_count": 53, " if date.month == m + 1]) \n",
"id": "762dd08f-7d1e-4b68-b272-e7aa9b26d9f1", " for m in range(12)])\n",
"metadata": {}, "\n",
"outputs": [], "np.save(f\"./data/WRF/WRF_NUMDAYS_MON.npy\", wrf_days)\n",
"source": [ "np.save(f\"./data/INMCM/INMCM_NUMDAYS_MON.npy\", inm_days)\n",
"inm_days = np.array([len([\n",
" i for i, date in enumerate(inmcm_dt_indicies) \n",
" if date.month == m + 1\n",
" ]) for m in range(12)])\n",
"\n", "\n",
"np.save(f\"./data/INMCM/INMCM_NUMDAYS_MON.npy\", inm_days)"
]
},
{
"cell_type": "code",
"execution_count": 52,
"id": "78afb8e1-3975-4e19-993f-1b0c74c3e9bd",
"metadata": {},
"outputs": [],
"source": [
"# for average over months use\n", "# for average over months use\n",
"# `(wrf_data_LATxMON[:, :].sum(axis=0)*days).sum()/days.sum()`\n", "# `(wrf_data_LATxMON[:, :].sum(axis=0)*days).sum()/days.sum()`\n",
"# unstead\n", "# unstead\n",
"# `wrf_data_LATxMON[:, :].sum(axis=0).mean()`\n", "# `wrf_data_LATxMON[:, :].sum(axis=0).mean()`\n",
"# because\n", "# because\n",
"# ((a1+a2+a3)/3 + (b1+b2)/2)/2 != (a1+a2+a3+b1+b2)/5" "# `((a1+a2+a3)/3 + (b1+b2)/2)/2 != (a1+a2+a3+b1+b2)/5`"
] ]
} }
], ],

Loading…
Cancel
Save