ipython: cómo configurar el ancho del terminal

Cuando uso el ipython terminal y quiero imprimir un numpy.ndarray que tiene muchas columnas, las líneas se rompen automáticamente en algún lugar alrededor de 80 caracteres (es decir, el ancho de las líneas es cca 80 caracteres):

 z = zeros((2,20)) print z 

Presumiblemente, ipython espera que mi terminal tenga 80 columnas. De hecho, sin embargo, mi terminal tiene un ancho de 176 caracteres y me gustaría usar el ancho completo.

He intentado cambiar el siguiente parámetro, pero esto no tiene ningún efecto:

 c.PlainTextFormatter.max_width = 160 

¿Cómo puedo decirle a ipython que use todo el ancho de mi terminal?

Estoy usando ipython 1.2.1 en Debian Wheezy

Después de revisar el código, parece que la variable que está buscando es numpy.core.arrayprint._line_width , que es 75 de forma predeterminada. Poniéndolo en 160 funcionó para mí:

 >>> 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.]]) 

La función utilizada de forma predeterminada para el formato de matriz es numpy.core.numeric.array_repr , aunque puede cambiarlo con numpy.core.numeric.set_string_function .

Puedes ver el ancho de tu línea actual con

 numpy.get_printoptions()['linewidth'] 

y configurarlo con

 numpy.set_printoptions(linewidth=160) 

Ajustar automáticamente el ancho de impresión

Si desea que el ancho del terminal se establezca automáticamente, puede hacer que Python ejecute un script de inicio. Así que crea un archivo ~/.python_startup.py o como quieras llamarlo, con esto dentro:

 # 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 

y para que Python ejecute esto cada vez, abra su archivo ~/.bashrc y agregue

 # 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 

Para cambiar automáticamente el tamaño de numpy e IPython cada vez que cambie el tamaño de su ventana, agregue lo siguiente a su 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) 

Si desea demorar la carga de números hasta que sea necesario, busque la opción Enviar ganchos de importación en Python 3 .

Si no está utilizando IPython, coloque lo anterior en su archivo PYTHONSTARTUP y elimine las líneas específicas de IPython.