{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Use pure numpy array\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Despite the \"x\" in its name (indicating xarray-compatible), xESMF can also work\n", "with basic numpy arrays. You don't have to use xarray data structure if you\n", "don't need to track metadata. As long as you have numpy arrays describing the\n", "input data and input/output coordinate values, you can perform regridding.\n", "\n", "Code in this section is adapted from\n", "[an xarray example](http://xarray.pydata.org/en/stable/plotting.html#multidimensional-coordinates).\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# not importing xarray here!\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import xesmf as xe" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Rectilinear grid\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Input data\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Just make some fake data.\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "data = np.arange(20).reshape(4, 5)\n", "plt.pcolormesh(data)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Define grids\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In previous examples we use xarray `DataSet` as input/output grids. But you can\n", "also use a simple dictionary:\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "grid_in = {\"lon\": np.linspace(0, 40, 5), \"lat\": np.linspace(0, 20, 4)}\n", "\n", "# output grid has a larger coverage and finer resolution\n", "grid_out = {\"lon\": np.linspace(-20, 60, 51), \"lat\": np.linspace(-10, 30, 41)}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Perform regridding\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "xESMF Regridder \n", "Regridding algorithm: bilinear \n", "Input grid shape: (4, 5) \n", "Output grid shape: (41, 51) \n", "Output grid dimension name: ('lat', 'lon') \n", "Periodic in longitude? False" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "regridder = xe.Regridder(grid_in, grid_out, \"bilinear\")\n", "regridder" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `regridder` here has no difference from the ones made from xarray `DataSet`.\n", "You can use it to regrid `DataArray` or just a basic `numpy.ndarray`:\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(41, 51)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data_out = regridder(data) # regrid a basic numpy array\n", "data_out.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Check results\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.pcolormesh(data_out)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Curvilinear grid\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Grids\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We use the previous input data, but now assume it is on a curvilinear grid\n", "described by 2D arrays. We also computed the cell corners, for two purposes:\n", "\n", "- Visualization with `plt.pcolormesh` (using cell centers will miss one\n", " row&column)\n", "- Conservative regridding with xESMF (corner information is required for\n", " conservative method)\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# cell centers\n", "lon, lat = np.meshgrid(np.linspace(-20, 20, 5), np.linspace(0, 30, 4))\n", "lon += lat / 3\n", "lat += lon / 3\n", "\n", "# cell corners\n", "lon_b, lat_b = np.meshgrid(np.linspace(-25, 25, 6), np.linspace(-5, 35, 5))\n", "lon_b += lat_b / 3\n", "lat_b += lon_b / 3" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'lat')" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.pcolormesh(lon_b, lat_b, data)\n", "plt.scatter(lon, lat) # show cell center\n", "plt.xlabel(\"lon\")\n", "plt.ylabel(\"lat\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the output grid, just use a simple rectilinear one:\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "lon_out_b = np.linspace(-30, 40, 36) # bounds\n", "lon_out = 0.5 * (lon_out_b[1:] + lon_out_b[:-1]) # centers\n", "\n", "lat_out_b = np.linspace(-20, 50, 36)\n", "lat_out = 0.5 * (lat_out_b[1:] + lat_out_b[:-1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To use conservative algorithm, both input and output grids should contain 4\n", "variables: `lon`, `lat`, `lon_b`, `lon_b`.\n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "grid_in = {\"lon\": lon, \"lat\": lat, \"lon_b\": lon_b, \"lat_b\": lat_b}\n", "\n", "grid_out = {\n", " \"lon\": lon_out,\n", " \"lat\": lat_out,\n", " \"lon_b\": lon_out_b,\n", " \"lat_b\": lat_out_b,\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Regridding\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "xESMF Regridder \n", "Regridding algorithm: conservative \n", "Input grid shape: (4, 5) \n", "Output grid shape: (35, 35) \n", "Output grid dimension name: ('lat', 'lon') \n", "Periodic in longitude? False" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "regridder = xe.Regridder(grid_in, grid_out, \"conservative\")\n", "regridder" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(35, 35)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data_out = regridder(data)\n", "data_out.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Results\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'lat')" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.pcolormesh(lon_out_b, lat_out_b, data_out)\n", "plt.xlabel(\"lon\")\n", "plt.ylabel(\"lat\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## All possible combinations\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "All $2 \\times 2\\times 2 = 8$ combinations would work:\n", "\n", "- Input grid: `xarray.DataSet` or `dict`\n", "- Output grid: `xarray.DataSet` or `dict`\n", "- Input data: `xarray.DataArray` or `numpy.ndarray`\n", "\n", "The output data type will be the same as input data.\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "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.8.2" }, "toc": { "nav_menu": {}, "number_sections": true, "sideBar": false, "skip_h1_title": false, "toc_cell": false, "toc_position": { "height": "200px", "left": "2px", "right": "20px", "top": "101px", "width": "212px" }, "toc_section_display": "block", "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }