John Ladasky
2016-07-19 21:41:04 UTC
Hi there,
I've been using Numpy for several years and appreciate it very much.
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.
import numpy as np
a = np.random.random((4,3))
print(a, "\n")
opt = np.get_printoptions()
np.set_printoptions(precision = 3, suppress = True)
print(a, "\n")
np.set_printoptions(opt)
print(a, "\n\nDone.\n")
Here is the traceback:
Traceback (most recent call last):
File "set_printoptions test.py", line 11, in <module>
print(a, "\n\nDone.\n")
File "/usr/lib/python3/dist-packages/numpy/core/numeric.py", line 1615,
in array_str
return array2string(a, max_line_width, precision, suppress_small, ' ',
"", str)
File "/usr/lib/python3/dist-packages/numpy/core/arrayprint.py", line 454,
in array2string
separator, prefix, formatter=formatter)
File "/usr/lib/python3/dist-packages/numpy/core/arrayprint.py", line 328,
in _array2string
_summaryEdgeItems, summary_insert)[:-1]
File "/usr/lib/python3/dist-packages/numpy/core/arrayprint.py", line 523,
in _formatArray
summary_insert)
File "/usr/lib/python3/dist-packages/numpy/core/arrayprint.py", line 497,
in _formatArray
word = format_function(a[-i]) + separator
File "/usr/lib/python3/dist-packages/numpy/core/arrayprint.py", line 616,
in __call__
s = self.format % x
AttributeError: 'FloatFormat' object has no attribute 'format'
It took me a while to discover the bug, on the second to last line. That
line should read:
np.set_printoptions(**opt)
This unpacks the dictionary, opt, which was retrieved earlier in the
program with the call to get_printoptions.
I am wondering why set_printoptions would accept the dictionary as a single
argument. Shouldn't that raise a TypeError or something?
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.
Should this be considered a Numpy bug, or is there some reason that
set_printoptions would legitimately need to accept a dictionary as a single
argument?
I've been using Numpy for several years and appreciate it very much.
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.
import numpy as np
a = np.random.random((4,3))
print(a, "\n")
opt = np.get_printoptions()
np.set_printoptions(precision = 3, suppress = True)
print(a, "\n")
np.set_printoptions(opt)
print(a, "\n\nDone.\n")
Here is the traceback:
Traceback (most recent call last):
File "set_printoptions test.py", line 11, in <module>
print(a, "\n\nDone.\n")
File "/usr/lib/python3/dist-packages/numpy/core/numeric.py", line 1615,
in array_str
return array2string(a, max_line_width, precision, suppress_small, ' ',
"", str)
File "/usr/lib/python3/dist-packages/numpy/core/arrayprint.py", line 454,
in array2string
separator, prefix, formatter=formatter)
File "/usr/lib/python3/dist-packages/numpy/core/arrayprint.py", line 328,
in _array2string
_summaryEdgeItems, summary_insert)[:-1]
File "/usr/lib/python3/dist-packages/numpy/core/arrayprint.py", line 523,
in _formatArray
summary_insert)
File "/usr/lib/python3/dist-packages/numpy/core/arrayprint.py", line 497,
in _formatArray
word = format_function(a[-i]) + separator
File "/usr/lib/python3/dist-packages/numpy/core/arrayprint.py", line 616,
in __call__
s = self.format % x
AttributeError: 'FloatFormat' object has no attribute 'format'
It took me a while to discover the bug, on the second to last line. That
line should read:
np.set_printoptions(**opt)
This unpacks the dictionary, opt, which was retrieved earlier in the
program with the call to get_printoptions.
I am wondering why set_printoptions would accept the dictionary as a single
argument. Shouldn't that raise a TypeError or something?
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.
Should this be considered a Numpy bug, or is there some reason that
set_printoptions would legitimately need to accept a dictionary as a single
argument?
--
*John J. Ladasky Jr., Ph.D.*
*Research Scientist*
*International Technological University*
*2711 N. First St, San Jose, CA 95134 USA*
*John J. Ladasky Jr., Ph.D.*
*Research Scientist*
*International Technological University*
*2711 N. First St, San Jose, CA 95134 USA*