当我使用ipython terminal
并想要打印一个有许多列的numpy.ndarray
时,这些行会自动断开约80个字符(即行的宽度为cca 80个字符):
z = zeros((2,20))
print z
据推测,ipython期望我的终端有80列。事实上,我的终端宽度为176个字符,我想使用全宽。
我尝试更改以下参数,但这没有效果:
c.PlainTextFormatter.max_width = 160
如何判断ipython
使用终端的全宽?
我在Debian Wheezy上使用ipython 1.2.1
答案 0 :(得分:27)
您可以使用
查看当前的线宽numpy.get_printoptions()['linewidth']
并使用
进行设置numpy.set_printoptions(linewidth=160)
如果您希望自动设置终端宽度,可以让Python执行启动脚本。因此,创建一个文件~/.python_startup.py
或任何你想要调用它的文件,其中包含:
# 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
让Python每次执行此操作,打开~/.bashrc
文件,然后添加
# 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
答案 1 :(得分:20)
在对代码进行一些挖掘之后,您正在寻找的变量似乎是numpy.core.arrayprint._line_width
,默认情况下为75。将它设置为160对我有用:
>>> 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.]])
默认情况下,数组格式使用的函数为numpy.core.numeric.array_repr
,但您可以使用numpy.core.numeric.set_string_function
更改此内容。
答案 2 :(得分:4)
要在窗口大小发生变化时自动调整numpy和IPython的大小,请将以下内容添加到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)
如果您想在必要时延迟加载numpy,请查看Post import hooks in Python 3以获得解决方案。
如果您不使用IPython,请将上述内容放入PYTHONSTARTUP文件中,然后删除特定于IPython的行。
答案 3 :(得分:0)
使用此方法:
np.set_printoptions(linewidth=300)
使用以下方法扩大您的iphyton视图:
from IPython.core.display import display, HTML
display(HTML("<style>.container { width:95% !important; }</style>"))