<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Decomposing and composing units — Astropy v0.2.4</title> <link rel="stylesheet" href="../_static/bootstrap-astropy.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', VERSION: '0.2.4', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true }; </script> <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> <script type="text/javascript" src="../_static/sidebar.js"></script> <link rel="shortcut icon" href="../_static/astropy_logo.ico"/> <link rel="top" title="Astropy v0.2.4" href="../index.html" /> <link rel="up" title="Units (astropy.units)" href="index.html" /> <link rel="next" title="Unit Conversion" href="conversion.html" /> <link rel="prev" title="Combining and defining units" href="combining_and_defining.html" /> </head> <body> <div class="topbar"> <a class="brand" title="Documentation Home" href="../index.html"></a> <ul> <li><a class="homelink" title="AstroPy Homepage" href="http://www.astropy.org"></a></li> <li><a title="General Index" href="../genindex.html">Index</a></li> <li><a title="Python Module Index" href="../py-modindex.html">Modules</a></li> <li> <form action="../search.html" method="get"> <input type="text" name="q" placeholder="Search" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> </li> </ul> </div> <div class="related"> <h3>Navigation</h3> <ul> <li class="right"> <a href="conversion.html" title="Unit Conversion"> next » </a> </li> <li class="right"> <a href="combining_and_defining.html" title="Combining and defining units"> « previous </a> | </li> <li> <a href="../index.html">Astropy v0.2.4</a> » </li> <li><a href="index.html" accesskey="U">Units (<tt class="docutils literal"><span class="pre">astropy.units</span></tt>)</a> »</li> <li>Decomposing and composing units</li> </ul> </div> <div class="document"> <div class="documentwrapper"> <div class="bodywrapper"> <div class="body"> <div class="section" id="decomposing-and-composing-units"> <h1>Decomposing and composing units<a class="headerlink" href="#decomposing-and-composing-units" title="Permalink to this headline">¶</a></h1> <div class="section" id="reducing-a-unit-to-its-irreducible-parts"> <h2>Reducing a unit to its irreducible parts<a class="headerlink" href="#reducing-a-unit-to-its-irreducible-parts" title="Permalink to this headline">¶</a></h2> <p>A unit can be decomposed into its irreducible parts using the <a class="reference internal" href="../_generated/astropy.units.core.UnitBase.html#astropy.units.core.UnitBase.decompose" title="astropy.units.core.UnitBase.decompose"><tt class="xref py py-obj docutils literal"><span class="pre">decompose</span></tt></a> method:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">astropy</span> <span class="kn">import</span> <span class="n">units</span> <span class="k">as</span> <span class="n">u</span> <span class="gp">>>> </span><span class="n">u</span><span class="o">.</span><span class="n">Ry</span> <span class="go">Unit("Ry")</span> <span class="gp">>>> </span><span class="n">u</span><span class="o">.</span><span class="n">Ry</span><span class="o">.</span><span class="n">decompose</span><span class="p">()</span> <span class="go">Unit("2.18e-18 m2 kg / (s2)")</span> </pre></div> </div> <p>You can limit the selection of units that you want to decompose to using the <tt class="xref py py-obj docutils literal"><span class="pre">bases</span></tt> keyword argument:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">u</span><span class="o">.</span><span class="n">Ry</span><span class="o">.</span><span class="n">decompose</span><span class="p">(</span><span class="n">bases</span><span class="o">=</span><span class="p">[</span><span class="n">u</span><span class="o">.</span><span class="n">m</span><span class="p">,</span> <span class="n">u</span><span class="o">.</span><span class="n">N</span><span class="p">])</span> <span class="go">Unit("2.179872e-18 m N")</span> </pre></div> </div> <p>This is also useful to decompose to a particular system. For example, to decompose the Rydberg unit in terms of CGS units:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">u</span><span class="o">.</span><span class="n">Ry</span><span class="o">.</span><span class="n">decompose</span><span class="p">(</span><span class="n">bases</span><span class="o">=</span><span class="n">u</span><span class="o">.</span><span class="n">cgs</span><span class="o">.</span><span class="n">bases</span><span class="p">)</span> <span class="go">Unit("2.179872e-11 cm2 g / (s2)")</span> </pre></div> </div> </div> <div class="section" id="automatically-composing-a-unit-into-more-complex-units"> <h2>Automatically composing a unit into more complex units<a class="headerlink" href="#automatically-composing-a-unit-into-more-complex-units" title="Permalink to this headline">¶</a></h2> <p>Conversely, a unit may be recomposed back into more complex units using the <a class="reference internal" href="../_generated/astropy.units.core.UnitBase.html#astropy.units.core.UnitBase.compose" title="astropy.units.core.UnitBase.compose"><tt class="xref py py-obj docutils literal"><span class="pre">compose</span></tt></a> method. Since there may be multiple equally good results, a list is always returned:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">x</span> <span class="o">=</span> <span class="n">u</span><span class="o">.</span><span class="n">Ry</span><span class="o">.</span><span class="n">decompose</span><span class="p">()</span> <span class="gp">>>> </span><span class="n">x</span><span class="o">.</span><span class="n">compose</span><span class="p">()</span> <span class="go">[Unit("1.000000e+00 Ry"),</span> <span class="go"> Unit("5.210019e-22 kcal"),</span> <span class="go"> Unit("5.210019e-19 cal"),</span> <span class="go"> Unit("2.066120e-21 BTU"),</span> <span class="go"> Unit("1.360569e+01 eV"),</span> <span class="go"> Unit("2.179872e-18 J"),</span> <span class="go"> Unit("2.179872e-11 erg")]</span> </pre></div> </div> <p>Some other interesting examples:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="p">(</span><span class="n">u</span><span class="o">.</span><span class="n">s</span> <span class="o">**</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">compose</span><span class="p">()</span> <span class="go">[Unit("Hz"),</span> <span class="go"> Unit("1 / (s)"),</span> <span class="go"> Unit("3.155693e+07 / (yr)"),</span> <span class="go"> Unit("8.640000e+04 / (d)"),</span> <span class="go"> Unit("6.000000e+01 / (min)"),</span> <span class="go"> Unit("3.600000e+03 / (h)"),</span> <span class="go"> Unit("6.048000e+05 / (wk)"),</span> <span class="go"> Unit("3.155693e+07 / (a)"),</span> <span class="go"> Unit("8.616409e+04 / (sday)"),</span> <span class="go"> Unit("1.209600e+06 / (fortnight)")]</span> </pre></div> </div> <p>Composition can be combined with <a class="reference internal" href="equivalencies.html#unit-equivalencies"><em>Equivalencies</em></a>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="p">(</span><span class="n">u</span><span class="o">.</span><span class="n">s</span> <span class="o">**</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">compose</span><span class="p">(</span><span class="n">equivalencies</span><span class="o">=</span><span class="n">u</span><span class="o">.</span><span class="n">spectral</span><span class="p">())</span> <span class="go">[Unit("Hz"),</span> <span class="go"> Unit("J"),</span> <span class="go"> Unit("m"),</span> <span class="go"> Unit("1 / (s)"),</span> <span class="go"> Unit("2.390057e-01 cal"),</span> <span class="go"> Unit("1.057001e-16 lyr"),</span> <span class="go"> Unit("1.093613e+00 yd"),</span> <span class="go"> Unit("3.240779e-17 pc"),</span> <span class="go"> Unit("4.587425e+17 Ry"),</span> <span class="go"> Unit("1.000000e+06 micron"),</span> <span class="go"> Unit("3.937008e+01 inch"),</span> <span class="go"> Unit("6.684587e-12 AU"),</span> <span class="go"> Unit("1.000000e+02 cm"),</span> <span class="go"> Unit("1.437798e-09 solRad"),</span> <span class="go"> Unit("6.241509e+18 eV"),</span> <span class="go"> Unit("3.280840e+00 ft"),</span> <span class="go"> Unit("2.390057e-04 kcal"),</span> <span class="go"> Unit("1.000000e+10 Angstrom"),</span> <span class="go"> Unit("1.000000e+07 erg"),</span> <span class="go"> Unit("9.478171e-04 BTU"),</span> <span class="go"> Unit("6.213712e-04 mi"),</span> <span class="go"> Unit("6.000000e+01 / (min)"),</span> <span class="go"> Unit("3.600000e+03 / (h)"),</span> <span class="go"> Unit("6.048000e+05 / (wk)"),</span> <span class="go"> Unit("8.616409e+04 / (sday)"),</span> <span class="go"> Unit("1.209600e+06 / (fortnight)"),</span> <span class="go"> Unit("8.640000e+04 / (d)"),</span> <span class="go"> Unit("3.155693e+07 / (yr)"),</span> <span class="go"> Unit("3.155693e+07 / (a)")]</span> </pre></div> </div> <p>Obviously a name doesn’t exist for every arbitrary derived unit imaginable. In that case, the system will do its best to reduce the unit to the fewest possible symbols:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="p">(</span><span class="n">u</span><span class="o">.</span><span class="n">cd</span> <span class="o">*</span> <span class="n">u</span><span class="o">.</span><span class="n">sr</span> <span class="o">*</span> <span class="n">u</span><span class="o">.</span><span class="n">V</span> <span class="o">*</span> <span class="n">u</span><span class="o">.</span><span class="n">s</span><span class="p">)</span><span class="o">.</span><span class="n">compose</span><span class="p">()</span> <span class="go">[Unit("lm Wb")]</span> </pre></div> </div> </div> <div class="section" id="converting-between-systems"> <h2>Converting between systems<a class="headerlink" href="#converting-between-systems" title="Permalink to this headline">¶</a></h2> <p>Built on top of this functionality is a convenience method to convert between unit systems.</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">u</span><span class="o">.</span><span class="n">Pa</span><span class="o">.</span><span class="n">to_system</span><span class="p">(</span><span class="n">u</span><span class="o">.</span><span class="n">cgs</span><span class="p">)</span> <span class="go">[Unit("1.000000e+01 Ba")]</span> </pre></div> </div> <p>This is equivalent to decomposing into the new system and then composing into the most complex units possible, though <tt class="xref py py-obj docutils literal"><span class="pre">to_system</span></tt> adds some extra logic to return the results sorted in the most useful order:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">u</span><span class="o">.</span><span class="n">Pa</span><span class="o">.</span><span class="n">decompose</span><span class="p">(</span><span class="n">bases</span><span class="o">=</span><span class="n">u</span><span class="o">.</span><span class="n">cgs</span><span class="o">.</span><span class="n">bases</span><span class="p">)</span> <span class="go">Unit("1.000000e+01 g / (cm s2)")</span> <span class="gp">>>> </span><span class="n">_</span><span class="o">.</span><span class="n">compose</span><span class="p">(</span><span class="n">units</span><span class="o">=</span><span class="n">u</span><span class="o">.</span><span class="n">cgs</span><span class="p">)</span> <span class="go">[Unit("1.000000e+01 Ba")]</span> </pre></div> </div> </div> </div> </div> </div> </div> <div class="sphinxsidebar"> <div class="sphinxsidebarwrapper"><h3>Page Contents</h3> <ul> <li><a class="reference internal" href="#">Decomposing and composing units</a><ul> <li><a class="reference internal" href="#reducing-a-unit-to-its-irreducible-parts">Reducing a unit to its irreducible parts</a></li> <li><a class="reference internal" href="#automatically-composing-a-unit-into-more-complex-units">Automatically composing a unit into more complex units</a></li> <li><a class="reference internal" href="#converting-between-systems">Converting between systems</a></li> </ul> </li> </ul> </div> </div> <div class="clearer"></div> </div> <footer class="footer"> <p class="pull-right"> <a href="http://github.com/astropy/astropy/tree/v0.2.4/docs/units/decomposing_and_composing.rst">Edit This Page on Github</a> <a href="../_sources/units/decomposing_and_composing.txt" rel="nofollow">Page Source</a> <a href="#">Back to Top</a></p> <p> © Copyright 2011-2013, The Astropy Developers.<br/> Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3. Last built 22 Oct 2013. <br/> </p> </footer> </body> </html>