Re: Numpy Array printing algorithms
On Tue, Jun 3, 2014 at 12:00 AM, Juan NunezIglesias <jni.soma@gmail.com> wrote:
Hi All,
This is more suited for a numpy list but thought I'd try the home crowd first. Does anyone know how numpy decides to print arrays? It is a pain getting doctests to pass without knowing the system. Example:
In [15]: lifio.parse_series_name(name2)[1][:5] Out[15]: array([ 63. , 63.5, 64. , 64.5, 65. ])
In [16]: lifio.parse_series_name(name2, 1)[1][:5] Out[16]: array([ 63., 64., 65., 66., 67.])
Note:
It goes 63.<space>,<spacespace>63.5,<spacespace>64.<space> etc. Note also the space after the opening brace but not the closing brace. Basically, you can't go by PEP8, so it's a pain predicting what the actual printout is going to be. I get the space after the . so that the .5's will align, but what about the leading spaces?
Juan.
Part of what you're looking for is set by `np.set_printoptions`. For example, you can write something like In [31]: np.set_printoptions(formatter={'all': lambda x: '{}'.format(x)}, precision=3) In [32]: a Out[32]: array([10.0, 10.5, 11.0, 11.5, 12.0, 12.5, 13.0, 13.5, 14.0, 14.5, 15.0, 15.5, 16.0, 16.5, 17.0, 17.5, 18.0, 18.5, 19.0, 19.5, 20.0]) In [33]: print a [10.0 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 14.5 15.0 15.5 16.0 16.5 17.0 17.5 18.0 18.5 19.0 19.5 20.0] Note that `repr` adds commas after values (and the `array(` prefix), while `str` doesn't. There's some magic in the default formatter that I haven't dug into. Somehow, it's able to read all the values beforehand so that it can determine the maximum width needed to align values. So for example, you might write this In [38]: a = np.array([1, 10, 100, 1000]) and get this as output In [39]: print a [1 10 100 1000] But what you really wanted was this In [40]: np.set_printoptions(formatter={'all': lambda x: '{:4}'.format(x)}, precision=3) In [41]: print a [ 1  10  100 1000] Ideally that `{:4}` could be determined after looking at the entire array. That part is a bit of a mystery to me.
participants (1)

Tony Yu