Reputation: 527
When I use ipython terminal
and want to print a numpy.ndarray
which has many columns, the lines are automatically broken somewhere around 80 characters (i.e. the width of the lines is cca 80 chars):
z = zeros((2,20))
print z
Presumably, ipython expects that my terminal has 80 columns. In fact however, my terminal has width of 176 characters and I would like to use the full width.
I have tried changing the following parameter, but this has no effect:
c.PlainTextFormatter.max_width = 160
How can I tell ipython
to use full width of my terminal ?
I am using ipython 1.2.1
on Debian Wheezy
Upvotes: 32
Views: 17804
Reputation: 1
use this method :
np.set_printoptions(linewidth=300)
and widen your iphyton view using this:
from IPython.core.display import display, HTML
display(HTML("<style>.container { width:95% !important; }</style>"))
Upvotes: 0
Reputation: 53214
To automatically resize both numpy and IPython whenever your window size changes, add the following to your ipython_config.py
:
import IPython
import signal
import shutil
import sys
try:
import numpy as np
except ImportError:
pass
c = get_config()
def update_terminal_width(*ignored):
"""Resize the IPython and numpy printing width to match the terminal."""
w, h = shutil.get_terminal_size()
config = IPython.get_ipython().config
config.PlainTextFormatter.max_width = w - 1
shell = IPython.core.interactiveshell.InteractiveShell.instance()
shell.init_display_formatter()
if 'numpy' in sys.modules:
import numpy as np
np.set_printoptions(linewidth=w - 5)
# We need to configure IPython here differently because get_ipython() does not
# yet exist.
w, h = shutil.get_terminal_size()
c.PlainTextFormatter.max_width = w - 1
if 'numpy' in sys.modules:
import numpy as np
np.set_printoptions(linewidth=w - 5)
signal.signal(signal.SIGWINCH, update_terminal_width)
If you want to delay loading numpy until necessary, look at Post import hooks in Python 3 for a solution.
If you're not using IPython, put the above in your PYTHONSTARTUP file and remove the IPython-specific lines.
Upvotes: 9
Reputation: 4394
You can see your current line width with
numpy.get_printoptions()['linewidth']
and set it with
numpy.set_printoptions(linewidth=160)
If you'd like the terminal width to be set automatically, you can have Python execute a startup script. So create a file ~/.python_startup.py
or whatever you want to call it, with this inside it:
# Set the printing width to the current terminal width for NumPy.
#
# Note: if you change the terminal's width after starting Python,
# it will not update the printing width.
from os import getenv
terminal_width = getenv('COLUMNS')
try:
terminal_width = int(terminal_width)
except (ValueError, TypeError):
print('Sorry, I was unable to read your COLUMNS environment variable')
terminal_width = None
if terminal_width is not None and terminal_width > 0:
from numpy import set_printoptions
set_printoptions(linewidth = terminal_width)
del terminal_width
and to have Python execute this every time, open your ~/.bashrc
file, and add
# Instruct Python to execute a start up script
export PYTHONSTARTUP=$HOME/.python_startup.py
# Ensure that the startup script will be able to access COLUMNS
export COLUMNS
Upvotes: 38
Reputation: 25855
After some digging through the code, it appears that the variable you're looking for is numpy.core.arrayprint._line_width
, which is 75 by default. Setting it to 160 worked for me:
>>> numpy.zeros((2, 20))
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.]])
The function used by default for array formatting is numpy.core.numeric.array_repr
, although you can change this with numpy.core.numeric.set_string_function
.
Upvotes: 20