How to set max output width in numpy?

Question:

I am using a Jupyter notebook. I have a pretty wide screen, but the displayed output (say, when I print a numpy array) is formatted as if the screen was narrow.

I found a way of increasing the width of the cells, with

from IPython.core.display import HTML
HTML("<style>.container { width:95% !important; }</style>")

but this seems to influence the input only, not the output (see screenshots):

short input
longer input

I’ve tried setting the linewidth option in numpy.set_printoptions, I’ve tried setting numpy.core.arrayprint._line_width, nothing…

EDIT: Using matplotlib I can set the width of plots (that I plot in the notebook with the magic %matplotlib inline) with the command plt.rcParams['figure.figsize']=[X,Y]. It turns out that I can increase X to have plots fill the output cell horizontally all the way. This means (I think) that the original problem it’s a numpy thing.

Asked By: Ziofil

||

Answers:

This is a year old now but maybe the answer will help someone else.

The way numpy-arrays are displayed depends on a number of things.
With this code, you can show more items and use the full width of your screen:

This is the default

import numpy as np
np.set_printoptions(edgeitems=3)
np.core.arrayprint._line_width = 80

>>> array([[[0, 0, 0, ..., 0, 0, 0],
>>>    [0, 0, 0, ..., 0, 0, 0],
>>>    [0, 0, 0, ..., 0, 0, 0],
>>>    ..., 

With the following code you increase the items shown at the edge of each array (start and end) as well as the line width:

import numpy as np
np.set_printoptions(edgeitems=10)
np.core.arrayprint._line_width = 180

>>> array([[[  0,   0,   0,   0,   0,   0,   0,   0,   0,   0, ...,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0],
>>>         [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0, ...,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0],
>>>         [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0, ...,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0],
Answered By: Frank Herfert

I found this answer helpful in creating my own:

import numpy as np
np.set_printoptions(edgeitems=30, linewidth=100000, 
    formatter=dict(float=lambda x: "%.3g" % x))

The absurd linewidth means only edgeitems and the window’s width will determine when newlines/wrapping occurs.

enter image description here

If I shrink the window a bit, it looks like this, so you may still need to play with the edgeitems or formatting:

enter image description here

Here are the docs for set_printoptions, of which the following are relevant:

  • edgeitems : Number of array items in summary at beginning and end of each dimension (default 3).

  • linewidth : The number of characters per line for the purpose of inserting line breaks (default 75).

Answered By: DharmaTurtle
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.