<div dir="ltr"><div>Hi there,</div><div><br></div><div>I've been using Numpy for several years and appreciate it very much.</div><div><br></div>The following minimal code has been tried on Python 3.4 and 3.5, with Numpy 1.8 and Numpy 1.11, respectively.  I want to temporarily change the way that a Numpy array is printed, then change it back.<div><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div><font face="monospace, monospace" size="1">import numpy as np</font></div></div><div><div><font face="monospace, monospace" size="1"><br></font></div></div><div><div><font face="monospace, monospace" size="1">a = np.random.random((4,3))</font></div></div><div><div><font face="monospace, monospace" size="1">print(a, "\n")</font></div></div><div><div><font face="monospace, monospace" size="1">opt = np.get_printoptions()</font></div></div><div><div><font face="monospace, monospace" size="1">np.set_printoptions(precision = 3, suppress = True)</font></div></div><div><div><font face="monospace, monospace" size="1">print(a, "\n")</font></div></div><div><div><font face="monospace, monospace" size="1">np.set_printoptions(opt)</font></div></div><div><div><font face="monospace, monospace" size="1">print(a, "\n\nDone.\n")</font></div></div></blockquote><div><div><br></div><div>Here is the traceback:</div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div><font face="monospace, monospace" size="1"><br></font></div></div><div><div><div><font face="monospace, monospace" size="1">Traceback (most recent call last):</font></div></div></div><div><div><div><font face="monospace, monospace" size="1">  File "set_printoptions test.py", line 11, in <module></font></div></div></div><div><div><div><font face="monospace, monospace" size="1">    print(a, "\n\nDone.\n")</font></div></div></div><div><div><div><font face="monospace, monospace" size="1">  File "/usr/lib/python3/dist-packages/numpy/core/numeric.py", line 1615, in array_str</font></div></div></div><div><div><div><font face="monospace, monospace" size="1">    return array2string(a, max_line_width, precision, suppress_small, ' ', "", str)</font></div></div></div><div><div><div><font face="monospace, monospace" size="1">  File "/usr/lib/python3/dist-packages/numpy/core/arrayprint.py", line 454, in array2string</font></div></div></div><div><div><div><font face="monospace, monospace" size="1">    separator, prefix, formatter=formatter)</font></div></div></div><div><div><div><font face="monospace, monospace" size="1">  File "/usr/lib/python3/dist-packages/numpy/core/arrayprint.py", line 328, in _array2string</font></div></div></div><div><div><div><font face="monospace, monospace" size="1">    _summaryEdgeItems, summary_insert)[:-1]</font></div></div></div><div><div><div><font face="monospace, monospace" size="1">  File "/usr/lib/python3/dist-packages/numpy/core/arrayprint.py", line 523, in _formatArray</font></div></div></div><div><div><div><font face="monospace, monospace" size="1">    summary_insert)</font></div></div></div><div><div><div><font face="monospace, monospace" size="1">  File "/usr/lib/python3/dist-packages/numpy/core/arrayprint.py", line 497, in _formatArray</font></div></div></div><div><div><div><font face="monospace, monospace" size="1">    word = format_function(a[-i]) + separator</font></div></div></div><div><div><div><font face="monospace, monospace" size="1">  File "/usr/lib/python3/dist-packages/numpy/core/arrayprint.py", line 616, in __call__</font></div></div></div><div><div><div><font face="monospace, monospace" size="1">    s = self.format % x</font></div></div></div><div><div><div><font face="monospace, monospace" size="1">AttributeError: 'FloatFormat' object has no attribute 'format'</font></div></div></div></blockquote><div><div><br></div><div>It took me a while to discover the bug, on the second to last line.  That line should read:</div><div><br></div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div><span style="font-family:monospace,monospace;font-size:x-small">np.set_printoptions(**opt)</span></div></div></blockquote><div><div><br></div><div>This unpacks the dictionary, opt, which was retrieved earlier in the program with the call to <font face="monospace, monospace" size="1">get_printoptions</font>.</div><div><br></div><div>I am wondering why <font face="monospace, monospace" size="1">set_printoptions</font> would accept the dictionary as a single argument.  Shouldn't that raise a TypeError or something?  </div><div><br></div><div>The AttributeError that is raised the next time that one attempts to print a numpy array is remote from the problem, and thus rather uninformative, which is why I did not immediately diagnose my error.</div><div><br></div><div>Should this be considered a Numpy bug, or is there some reason that <font face="monospace, monospace" size="1">set_printoptions</font> would legitimately need to accept a dictionary as a single argument?</div><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><b>John J. Ladasky Jr., Ph.D.</b><div><b>Research Scientist</b></div><div><b>International Technological University</b></div><div><b>2711 N. First St, San Jose, CA 95134 USA</b></div></div></div>
</div></div>