.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/ex_axis.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note Click :ref:`here ` to download the full example code or to run this example in your browser via Binder .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_examples_ex_axis.py: **** Axis **** These objects manipulate axes as they can be found in NetCDF files: .. code:: float lat(lat) ; lat:long_name = "latitude" ; lat:units = "degrees_north" ; lat:standard_name = "latitude" ; float lon(lon) ; lon:long_name = "longitude" ; lon:units = "degrees_east" ; lon:standard_name = "longitude" ; Regular axis ============ For example, let's construct an axis representing a regular axis. .. GENERATED FROM PYTHON SOURCE LINES 25-32 .. code-block:: default import numpy import pyinterp axis = pyinterp.Axis(numpy.arange(-90, 90, 0.25)) axis .. rst-class:: sphx-glr-script-out Out: .. code-block:: none min_value: -90 max_value: 89.75 step : 0.25 is_circle: false .. GENERATED FROM PYTHON SOURCE LINES 33-34 This object can be queried to obtain its properties. .. GENERATED FROM PYTHON SOURCE LINES 34-38 .. code-block:: default print(f"is ascending ? {axis.is_ascending()}") print(f"is regular ? {axis.is_regular()}") print(f"is circle ? {axis.is_circle}") .. rst-class:: sphx-glr-script-out Out: .. code-block:: none is ascending ? True is regular ? True is circle ? False .. GENERATED FROM PYTHON SOURCE LINES 39-41 The most useful interfaces allow you to search for the index of the closest value. .. GENERATED FROM PYTHON SOURCE LINES 41-43 .. code-block:: default axis.find_index([1e-3]) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none array([360]) .. GENERATED FROM PYTHON SOURCE LINES 44-45 It is also possible to find the indices around a value. .. GENERATED FROM PYTHON SOURCE LINES 45-47 .. code-block:: default axis.find_indexes([1e-3]) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none array([[360, 361]]) .. GENERATED FROM PYTHON SOURCE LINES 48-50 The list of available methods is described in the :py:class:`online help ` . .. GENERATED FROM PYTHON SOURCE LINES 52-60 Irregular axis ============== When the axis is regular, the pitch is constant between each element of the axis, the search is performed using a simple calculation and therefore very fast. When the pitch is not constant between two successive elements of the axis, the search is performed by a binary search. Even these two operating modes are managed by the same object. So let's build an irregular axis: .. GENERATED FROM PYTHON SOURCE LINES 60-84 .. code-block:: default MERCATOR_LATITUDES = numpy.array([ -89.000000, -88.908818, -88.809323, -88.700757, -88.582294, -88.453032, -88.311987, -88.158087, -87.990161, -87.806932, -87.607008, -87.388869, -87.150861, -86.891178, -86.607851, -86.298736, -85.961495, -85.593582, -85.192224, -84.754402, -84.276831, -83.755939, -83.187844, -82.568330, -81.892820, -81.156357, -80.353575, -79.478674, -78.525397, -77.487013, -76.356296, -75.125518, -73.786444, -72.330344, -70.748017, -69.029837, -67.165823, -65.145744, -62.959262, -60.596124, -58.046413, -55.300856, -52.351206, -49.190700, -45.814573, -42.220632, -38.409866, -34.387043, -30.161252, -25.746331, -21.161107, -16.429384, -11.579629, -6.644331, -1.659041, 3.338836, 8.311423, 13.221792, 18.035297, 22.720709, 27.251074, 31.604243, 35.763079, 39.715378, 43.453560, 46.974192, 50.277423, 53.366377, 56.246554, 58.925270, 61.411164, 63.713764, 65.843134, 67.809578, 69.623418, 71.294813, 72.833637, 74.249378, 75.551083, 76.747318, 77.846146, 78.855128, 79.781321, 80.631294, 81.411149, 82.126535, 82.782681, 83.384411, 83.936179, 84.442084, 84.905904, 85.331111, 85.720897, 86.078198, 86.405707, 86.705898, 86.981044, 87.233227, 87.464359, 87.676195, 87.870342, 88.048275, 88.211348, 88.360799, 88.497766, 88.623291, 88.738328, 88.843755, 88.940374 ]) axis = pyinterp.Axis(MERCATOR_LATITUDES) axis .. rst-class:: sphx-glr-script-out Out: .. code-block:: none values : [-89. -88.908818 -88.809323 -88.700757 -88.582294 -88.453032 -88.311987 -88.158087 -87.990161 -87.806932 -87.607008 -87.388869 -87.150861 -86.891178 -86.607851 -86.298736 -85.961495 -85.593582 -85.192224 -84.754402 -84.276831 -83.755939 -83.187844 -82.56833 -81.89282 -81.156357 -80.353575 -79.478674 -78.525397 -77.487013 -76.356296 -75.125518 -73.786444 -72.330344 -70.748017 -69.029837 -67.165823 -65.145744 -62.959262 -60.596124 -58.046413 -55.300856 -52.351206 -49.1907 -45.814573 -42.220632 -38.409866 -34.387043 -30.161252 -25.746331 -21.161107 -16.429384 -11.579629 -6.644331 -1.659041 3.338836 8.311423 13.221792 18.035297 22.720709 27.251074 31.604243 35.763079 39.715378 43.45356 46.974192 50.277423 53.366377 56.246554 58.92527 61.411164 63.713764 65.843134 67.809578 69.623418 71.294813 72.833637 74.249378 75.551083 76.747318 77.846146 78.855128 79.781321 80.631294 81.411149 82.126535 82.782681 83.384411 83.936179 84.442084 84.905904 85.331111 85.720897 86.078198 86.405707 86.705898 86.981044 87.233227 87.464359 87.676195 87.870342 88.048275 88.211348 88.360799 88.497766 88.623291 88.738328 88.843755 88.940374] is_circle: false .. GENERATED FROM PYTHON SOURCE LINES 85-86 Let's display its properties. .. GENERATED FROM PYTHON SOURCE LINES 86-90 .. code-block:: default print(f"is ascending ? {axis.is_ascending()}") print(f"is regular ? {axis.is_regular()}") print(f"is circle ? {axis.is_circle}") .. rst-class:: sphx-glr-script-out Out: .. code-block:: none is ascending ? True is regular ? False is circle ? False .. GENERATED FROM PYTHON SOURCE LINES 91-92 It is possible to query this axis as before. .. GENERATED FROM PYTHON SOURCE LINES 92-94 .. code-block:: default axis.find_index([1e-3]) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none array([54]) .. GENERATED FROM PYTHON SOURCE LINES 95-100 Longitude ========= It is also possible to represent longitudes going around the earth, i.e. making a circle. .. GENERATED FROM PYTHON SOURCE LINES 100-103 .. code-block:: default axis = pyinterp.Axis(numpy.arange(0, 360, 1), is_circle=True) axis .. rst-class:: sphx-glr-script-out Out: .. code-block:: none min_value: 0 max_value: 359 step : 1 is_circle: true .. GENERATED FROM PYTHON SOURCE LINES 104-105 In this case, you don't have to worry about the bounds of the axis. .. GENERATED FROM PYTHON SOURCE LINES 105-107 .. code-block:: default axis.find_index([-180]), axis.find_index([180]) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none (array([180]), array([180])) .. GENERATED FROM PYTHON SOURCE LINES 108-125 TemporalAxis ============ Time axes allow for manipulating axes representing dates or time differences. These objects are specialized to handle the 64-bit integers used by numpy to describe dates without losing information during calculations. In a netCDF file these axes are described as follows: .. code:: double time(time) ; time:long_name = "time" ; time:units = "days since 1990-1-1 0:0:0" ; .. note:: These axes can be regular or irregular as before. .. GENERATED FROM PYTHON SOURCE LINES 125-130 .. code-block:: default dates = numpy.datetime64("2020-01-01") + numpy.arange( 10**6, step=500).astype("timedelta64[ms]") axis = pyinterp.TemporalAxis(dates) axis .. rst-class:: sphx-glr-script-out Out: .. code-block:: none min_value: 2020-01-01T00:00:00.000 max_value: 2020-01-01T00:16:39.500 step : 500 milliseconds .. GENERATED FROM PYTHON SOURCE LINES 131-132 It is possible to search for a date in this axis. .. GENERATED FROM PYTHON SOURCE LINES 132-134 .. code-block:: default axis.find_index(numpy.array([numpy.datetime64('2020-01-01T00:10:34.000')])) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none array([1268]) .. GENERATED FROM PYTHON SOURCE LINES 135-136 You can pass any date unit to the axis. .. GENERATED FROM PYTHON SOURCE LINES 136-138 .. code-block:: default axis.find_index(numpy.array([numpy.datetime64('2020-01-01')])) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none array([0]) .. GENERATED FROM PYTHON SOURCE LINES 139-140 This object also makes it possible to manipulate timedeltas. .. GENERATED FROM PYTHON SOURCE LINES 140-142 .. code-block:: default axis = pyinterp.TemporalAxis(dates - numpy.datetime64('2020-01-01')) axis .. rst-class:: sphx-glr-script-out Out: .. code-block:: none min_value: 0 milliseconds max_value: 999500 milliseconds step : 500 milliseconds .. rst-class:: sphx-glr-timing **Total running time of the script:** ( 0 minutes 0.007 seconds) .. _sphx_glr_download_auto_examples_ex_axis.py: .. only :: html .. container:: sphx-glr-footer :class: sphx-glr-footer-example .. container:: binder-badge .. image:: images/binder_badge_logo.svg :target: https://binder.pangeo.io/v2/gh/CNES/pangeo-pyinterp/master?filepath=notebooks/auto_examples/ex_axis.ipynb :alt: Launch binder :width: 150 px .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: ex_axis.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: ex_axis.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_