<!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>Matrix Formatting — CVXOPT User's Guide</title> <link rel="stylesheet" href="_static/cvxopt.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '#', VERSION: '1.1.1', COLLAPSE_MODINDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: false }; </script> <script type="text/javascript" src="_static/jquery.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> <link rel="copyright" title="Copyright" href="copyright.html" /> <link rel="top" title="CVXOPT User's Guide" href="index.html" /> <link rel="prev" title="C API" href="c-api.html" /> </head> <body> <div class="related"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="c-api.html" title="C API" accesskey="P">previous</a></li> <li><a href="http://abel.ee.ucla.edu/cvxopt">CVXOPT home</a> |</li> <li><a href="index.html">user's guide</a> </li> </ul> </div> <div class="document"> <div class="documentwrapper"> <div class="bodywrapper"> <div class="body"> <div class="section" id="matrix-formatting"> <span id="c-printing"></span><h1>Matrix Formatting<a class="headerlink" href="#matrix-formatting" title="Permalink to this headline">ΒΆ</a></h1> <p>This appendix describes ways to customize the formatting of CVXOPT matrices.</p> <p>As with other Python objects, the functions <tt class="xref docutils literal"><span class="pre">repr</span></tt> and <tt class="xref docutils literal"><span class="pre">str</span></tt> return strings with printable representations of matrices. The command ‘<tt class="docutils literal"><span class="pre">print</span> <span class="pre">A</span></tt>‘ executes ‘<tt class="docutils literal"><span class="pre">str(A)</span></tt>‘, whereas the command ‘<tt class="docutils literal"><span class="pre">A</span></tt>‘ calls ‘<tt class="docutils literal"><span class="pre">repr(A)</span></tt>‘. The following example illustrates the default formatting of dense matrices.</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">cvxopt</span> <span class="kn">import</span> <span class="n">matrix</span> <span class="gp">>>> </span><span class="n">A</span> <span class="o">=</span> <span class="n">matrix</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="mi">50</span><span class="p">),</span> <span class="p">(</span><span class="mi">5</span><span class="p">,</span><span class="mi">10</span><span class="p">),</span> <span class="s">'d'</span><span class="p">)</span> <span class="gp">>>> </span><span class="n">A</span> <span class="go"><5x10 matrix, tc='d'></span> <span class="gp">>>> </span><span class="k">print</span> <span class="n">A</span> <span class="go">[ 0.00e+00 5.00e+00 1.00e+01 1.50e+01 2.00e+01 2.50e+01 3.00e+01 ... ]</span> <span class="go">[ 1.00e+00 6.00e+00 1.10e+01 1.60e+01 2.10e+01 2.60e+01 3.10e+01 ... ]</span> <span class="go">[ 2.00e+00 7.00e+00 1.20e+01 1.70e+01 2.20e+01 2.70e+01 3.20e+01 ... ]</span> <span class="go">[ 3.00e+00 8.00e+00 1.30e+01 1.80e+01 2.30e+01 2.80e+01 3.30e+01 ... ]</span> <span class="go">[ 4.00e+00 9.00e+00 1.40e+01 1.90e+01 2.40e+01 2.90e+01 3.40e+01 ... ]</span> </pre></div> </div> <p>The format is parameterized by the dictionary <tt class="xref docutils literal"><span class="pre">options</span></tt> in the module <tt class="xref docutils literal"><span class="pre">cvxopt.printing</span></tt>. The parameters <tt class="xref docutils literal"><span class="pre">options['iformat']</span></tt> and <tt class="xref docutils literal"><span class="pre">options['dformat']</span></tt> determine, respectively, how integer and double/complex numbers are printed. The entries are Python format strings with default values <tt class="xref docutils literal"><span class="pre">'%</span> <span class="pre">.2e'</span></tt> for <tt class="xref docutils literal"><span class="pre">'d'</span></tt> and <tt class="xref docutils literal"><span class="pre">'z'</span></tt> matrices and <tt class="xref docutils literal"><span class="pre">%</span> <span class="pre">i'</span></tt> for <tt class="xref docutils literal"><span class="pre">'i'</span></tt> matrices. The parameters <tt class="xref docutils literal"><span class="pre">options['width']</span></tt> and <tt class="xref docutils literal"><span class="pre">options['height']</span></tt> specify the maximum number of columns and rows that are shown. If <tt class="xref docutils literal"><span class="pre">options['width']</span></tt> is set to a negative value, all columns are displayed. If <tt class="xref docutils literal"><span class="pre">options['height']</span></tt> is set to a negative value, all rows are displayed. The default values of <tt class="xref docutils literal"><span class="pre">options['width']</span></tt> and <tt class="xref docutils literal"><span class="pre">options['height']</span></tt> are 7 and -1, respectively.</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">cvxopt</span> <span class="kn">import</span> <span class="n">printing</span> <span class="gp">>>> </span><span class="n">printing</span><span class="o">.</span><span class="n">options</span> <span class="go">{'width': 7, 'dformat': '% .2e', 'iformat': '% i', 'height': -1}</span> <span class="gp">>>> </span><span class="n">printing</span><span class="o">.</span><span class="n">options</span><span class="p">[</span><span class="s">'dformat'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'</span><span class="si">%.1f</span><span class="s">'</span> <span class="gp">>>> </span><span class="n">printing</span><span class="o">.</span><span class="n">options</span><span class="p">[</span><span class="s">'width'</span><span class="p">]</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span> <span class="gp">>>> </span><span class="k">print</span> <span class="n">A</span> <span class="go">[ 0.0 5.0 10.0 15.0 20.0 25.0 30.0 35.0 40.0 45.0]</span> <span class="go">[ 1.0 6.0 11.0 16.0 21.0 26.0 31.0 36.0 41.0 46.0]</span> <span class="go">[ 2.0 7.0 12.0 17.0 22.0 27.0 32.0 37.0 42.0 47.0]</span> <span class="go">[ 3.0 8.0 13.0 18.0 23.0 28.0 33.0 38.0 43.0 48.0]</span> <span class="go">[ 4.0 9.0 14.0 19.0 24.0 29.0 34.0 39.0 44.0 49.0]</span> </pre></div> </div> <p>In order to make the built-in Python functions <tt class="xref docutils literal"><span class="pre">repr</span></tt> and <tt class="xref docutils literal"><span class="pre">str</span></tt> accessible for further customization, two functions are provided in CVXOPT. The function <tt class="xref docutils literal"><span class="pre">cvxopt.matrix_repr</span></tt> is used when <tt class="xref docutils literal"><span class="pre">repr</span></tt> is called with a matrix argument; and <tt class="xref docutils literal"><span class="pre">cvxopt.matrix_str</span></tt> is used when <tt class="xref docutils literal"><span class="pre">str</span></tt> is called with a matrix argument. By default, the functions are set to <tt class="xref docutils literal"><span class="pre">printing.matrix_repr_default</span></tt> and <tt class="xref docutils literal"><span class="pre">printing.matrix_str_default</span></tt>, respectively, but they can be redefined to any other Python functions. For example, if we prefer <tt class="docutils literal"><span class="pre">A</span></tt> to return the same output as <tt class="docutils literal"><span class="pre">print</span> <span class="pre">A</span></tt>, we can simply redefine <tt class="xref docutils literal"><span class="pre">cvxopt.matrix_repr</span></tt> as shown below.</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">import</span> <span class="nn">cvxopt</span> <span class="gp">>>> </span><span class="kn">from</span> <span class="nn">cvxopt</span> <span class="kn">import</span> <span class="n">matrix</span><span class="p">,</span> <span class="n">printing</span> <span class="gp">>>> </span><span class="n">A</span> <span class="o">=</span> <span class="n">matrix</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="mi">4</span><span class="p">),</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">),</span> <span class="s">'d'</span><span class="p">)</span> <span class="gp">>>> </span><span class="n">A</span> <span class="go"><2x2 matrix, tc='d'></span> <span class="gp">>>> </span><span class="n">cvxopt</span><span class="o">.</span><span class="n">matrix_repr</span> <span class="o">=</span> <span class="n">printing</span><span class="o">.</span><span class="n">matrix_str_default</span> <span class="gp">>>> </span><span class="n">A</span> <span class="go">[ 0.00e+00 2.00e+00]</span> <span class="go">[ 1.00e+00 3.00e+00]</span> </pre></div> </div> <p>The formatting for sparse matrices is similar. The functions <tt class="xref docutils literal"><span class="pre">repr</span></tt> and <tt class="xref docutils literal"><span class="pre">str</span></tt> for sparse matrices are <tt class="xref docutils literal"><span class="pre">cvxopt.spmatrix_repr</span></tt> and <tt class="xref docutils literal"><span class="pre">cvxopt.spmatrix_str</span></tt>, respectively. By default, they are set to <tt class="xref docutils literal"><span class="pre">printing.spmatrix_repr_default</span></tt> and <tt class="xref docutils literal"><span class="pre">printing.spmatrix_repr_str</span></tt>.</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">import</span> <span class="nn">cvxopt</span> <span class="gp">>>> </span><span class="kn">from</span> <span class="nn">cvxopt</span> <span class="kn">import</span> <span class="n">printing</span><span class="p">,</span> <span class="n">spmatrix</span> <span class="gp">>>> </span><span class="n">A</span> <span class="o">=</span> <span class="n">spmatrix</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="mi">5</span><span class="p">),</span> <span class="nb">range</span><span class="p">(</span><span class="mi">5</span><span class="p">),</span> <span class="nb">range</span><span class="p">(</span><span class="mi">5</span><span class="p">),</span> <span class="p">(</span><span class="mi">5</span><span class="p">,</span><span class="mi">10</span><span class="p">))</span> <span class="gp">>>> </span><span class="n">A</span> <span class="go"><5x10 sparse matrix, tc='d', nnz=5></span> <span class="gp">>>> </span><span class="k">print</span> <span class="n">A</span> <span class="go">[ 0.00e+00 0 0 0 0 0 0 ... ]</span> <span class="go">[ 0 1.00e+00 0 0 0 0 0 ... ]</span> <span class="go">[ 0 0 2.00e+00 0 0 0 0 ... ]</span> <span class="go">[ 0 0 0 3.00e+00 0 0 0 ... ]</span> <span class="go">[ 0 0 0 0 4.00e+00 0 0 ... ]</span> </pre></div> </div> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">cvxopt</span><span class="o">.</span><span class="n">spmatrix_repr</span> <span class="o">=</span> <span class="n">printing</span><span class="o">.</span><span class="n">spmatrix_str_default</span> <span class="gp">>>> </span><span class="n">A</span> <span class="go">[ 0.00e+00 0 0 0 0 0 0 ... ]</span> <span class="go">[ 0 1.00e+00 0 0 0 0 0 ... ]</span> <span class="go">[ 0 0 2.00e+00 0 0 0 0 ... ]</span> <span class="go">[ 0 0 0 3.00e+00 0 0 0 ... ]</span> <span class="go">[ 0 0 0 0 4.00e+00 0 0 ... ]</span> </pre></div> </div> <p>As can be seen from the example, the default behaviour is to print the entire matrix including structural zeros. An alternative triplet printing style is defined in <tt class="xref docutils literal"><span class="pre">printing.spmatrix_str_triplet</span></tt>.</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">cvxopt</span><span class="o">.</span><span class="n">spmatrix_str</span> <span class="o">=</span> <span class="n">printing</span><span class="o">.</span><span class="n">spmatrix_str_triplet</span> <span class="gp">>>> </span><span class="k">print</span> <span class="n">A</span> <span class="go">(0,0) 0.00e+00</span> <span class="go">(1,1) 1.00e+00</span> <span class="go">(2,2) 2.00e+00</span> <span class="go">(3,3) 3.00e+00</span> <span class="go">(4,4) 4.00e+00</span> </pre></div> </div> </div> </div> </div> </div> <div class="sphinxsidebar"> <div class="sphinxsidebarwrapper"> <h4>Previous topic</h4> <p class="topless"><a href="c-api.html" title="previous chapter">C API</a></p> <div id="searchbox" style="display: none"> <h3>Quick search</h3> <form class="search" action="search.html" method="get"> <input type="text" name="q" size="18" /> <input type="submit" value="Go" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> <p class="searchtip" style="font-size: 90%"> Enter search terms or a module, class or function name. </p> </div> <script type="text/javascript">$('#searchbox').show(0);</script> </div> </div> <div class="clearer"></div> </div> <div class="related"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="c-api.html" title="C API" >previous</a></li> <li><a href="http://abel.ee.ucla.edu/cvxopt">CVXOPT home</a> |</li> <li><a href="index.html">user's guide</a> </li> </ul> </div> <div class="footer"> Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.5. </div> </body> </html>