{ "cells": [ { "cell_type": "markdown", "id": "b74f6a93-148e-4668-a401-6104f54838e1", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## Xarray engine: hypercube with holes" ] }, { "cell_type": "markdown", "id": "8b3010be-7895-4fd2-8ad6-a57db7845396", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "This notebook demonstrates how to work with input data not forming a full hypercube. " ] }, { "cell_type": "markdown", "id": "190cab07-5f50-410c-9c56-604a95a64ef0", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "First, we get pressure level GRIB data with t, u and v variables, where u only contains the subset of the levels in t and v. This data forms a hypercube with holes." ] }, { "cell_type": "code", "execution_count": 1, "id": "f27152d7-42b2-4f65-a2a1-eda3d309b604", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "d191b679f67b440aabe786cdbcb919c8", "version_major": 2, "version_minor": 0 }, "text/plain": [ "tuv_pl_holes.grib: 0%| | 0.00/2.05k [00:00\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 12kB\n",
       "Dimensions:    (level: 6, latitude: 7, longitude: 12)\n",
       "Coordinates:\n",
       "  * level      (level) int64 48B 300 400 500 700 850 1000\n",
       "  * latitude   (latitude) float64 56B 90.0 60.0 30.0 0.0 -30.0 -60.0 -90.0\n",
       "  * longitude  (longitude) float64 96B 0.0 30.0 60.0 90.0 ... 270.0 300.0 330.0\n",
       "Data variables:\n",
       "    t          (level, latitude, longitude) float64 4kB ...\n",
       "    u          (level, latitude, longitude) float64 4kB ...\n",
       "    v          (level, latitude, longitude) float64 4kB ...\n",
       "Attributes:\n",
       "    class:        od\n",
       "    stream:       oper\n",
       "    levtype:      pl\n",
       "    type:         an\n",
       "    expver:       0001\n",
       "    date:         20180801\n",
       "    time:         1200\n",
       "    domain:       g\n",
       "    number:       0\n",
       "    Conventions:  CF-1.8\n",
       "    institution:  ECMWF
" ], "text/plain": [ " Size: 12kB\n", "Dimensions: (level: 6, latitude: 7, longitude: 12)\n", "Coordinates:\n", " * level (level) int64 48B 300 400 500 700 850 1000\n", " * latitude (latitude) float64 56B 90.0 60.0 30.0 0.0 -30.0 -60.0 -90.0\n", " * longitude (longitude) float64 96B 0.0 30.0 60.0 90.0 ... 270.0 300.0 330.0\n", "Data variables:\n", " t (level, latitude, longitude) float64 4kB ...\n", " u (level, latitude, longitude) float64 4kB ...\n", " v (level, latitude, longitude) float64 4kB ...\n", "Attributes:\n", " class: od\n", " stream: oper\n", " levtype: pl\n", " type: an\n", " expver: 0001\n", " date: 20180801\n", " time: 1200\n", " domain: g\n", " number: 0\n", " Conventions: CF-1.8\n", " institution: ECMWF" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds = ds_fl.to_xarray(allow_holes=True)\n", "ds" ] }, { "cell_type": "markdown", "id": "fc42a5ad-74f0-4bf7-8728-04cd4ce397cf", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "The resulting dataset works as expected but when we slice into the holes ``nans`` are returned." ] }, { "cell_type": "code", "execution_count": 4, "id": "c703b1e8-db3f-46b2-914e-712656694cdb", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "array([[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan],\n", " [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan],\n", " [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan],\n", " [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan],\n", " [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan],\n", " [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan],\n", " [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan]])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds.u.sel(level=300).values" ] }, { "cell_type": "code", "execution_count": 5, "id": "dd9c2b0c-82d5-410f-8ec4-7b599fa3f436", "metadata": { "editable": true, "raw_mimetype": "text/restructuredtext", "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "array([[[ 4.74000549, 4.74000549, 4.74000549, 4.74000549,\n", " 4.74000549, 4.74000549, 4.74000549, 4.74000549,\n", " 4.74000549, 4.74000549, 4.74000549, 4.74000549],\n", " [ 12.74000549, 4.74000549, 4.74000549, 28.74000549,\n", " 12.74000549, -3.25999451, 4.74000549, 4.74000549,\n", " 4.74000549, 12.74000549, 20.74000549, 4.74000549],\n", " [ -3.25999451, 4.74000549, -3.25999451, 4.74000549,\n", " -11.25999451, 4.74000549, -3.25999451, -3.25999451,\n", " -3.25999451, 4.74000549, -11.25999451, 12.74000549],\n", " [ 4.74000549, -3.25999451, -3.25999451, 12.74000549,\n", " -3.25999451, -11.25999451, -11.25999451, -3.25999451,\n", " 4.74000549, -3.25999451, -19.25999451, 4.74000549],\n", " [ 20.74000549, 36.74000549, 20.74000549, 12.74000549,\n", " 20.74000549, 12.74000549, 12.74000549, 36.74000549,\n", " 12.74000549, 4.74000549, 20.74000549, 12.74000549],\n", " [ 36.74000549, -3.25999451, 4.74000549, -3.25999451,\n", " 4.74000549, 28.74000549, 12.74000549, 4.74000549,\n", " 12.74000549, 36.74000549, 28.74000549, 20.74000549],\n", " [ 4.74000549, 4.74000549, 4.74000549, 4.74000549,\n", " 4.74000549, 4.74000549, 4.74000549, 4.74000549,\n", " 4.74000549, 4.74000549, 4.74000549, 4.74000549]],\n", "\n", " [[ nan, nan, nan, nan,\n", " nan, nan, nan, nan,\n", " nan, nan, nan, nan],\n", " [ nan, nan, nan, nan,\n", " nan, nan, nan, nan,\n", " nan, nan, nan, nan],\n", " [ nan, nan, nan, nan,\n", " nan, nan, nan, nan,\n", " nan, nan, nan, nan],\n", " [ nan, nan, nan, nan,\n", " nan, nan, nan, nan,\n", " nan, nan, nan, nan],\n", " [ nan, nan, nan, nan,\n", " nan, nan, nan, nan,\n", " nan, nan, nan, nan],\n", " [ nan, nan, nan, nan,\n", " nan, nan, nan, nan,\n", " nan, nan, nan, nan],\n", " [ nan, nan, nan, nan,\n", " nan, nan, nan, nan,\n", " nan, nan, nan, nan]]])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds.u.sel(level=[500,300]).values" ] } ], "metadata": { "kernelspec": { "display_name": "dev", "language": "python", "name": "dev" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.12" } }, "nbformat": 4, "nbformat_minor": 5 }