当我打印一个numpy数组时,我得到一个截断的表示,但我想要完整的数组 .
有没有办法做到这一点?
Examples:
>>> numpy.arange(10000)
array([ 0, 1, 2, ..., 9997, 9998, 9999])
>>> numpy.arange(10000).reshape(250,40)
array([[ 0, 1, 2, ..., 37, 38, 39],
[ 40, 41, 42, ..., 77, 78, 79],
[ 80, 81, 82, ..., 117, 118, 119],
...,
[9880, 9881, 9882, ..., 9917, 9918, 9919],
[9920, 9921, 9922, ..., 9957, 9958, 9959],
[9960, 9961, 9962, ..., 9997, 9998, 9999]])
13 回答
假设你有一个numpy数组
如果你想以一次性的方式打印完整的数组(没有切换np.set_printoptions),但想要比上下文管理器更简单(更少的代码),只需要做
澄清里德的回复
请注意,上面给出的回复适用于初始
from numpy import *
,这是不可取的 .有关完整文档,请参阅http://docs.scipy.org/doc/numpy/reference/generated/numpy.set_printoptions.html .
我建议使用
np.inf
而不是其他人建议的np.nan
. 它们都可以用于您的目的,但是通过将阈值设置为"infinity",每个人都可以阅读您的代码,这是显而易见的 . 有一个"not a number"的门槛对我来说似乎有点模糊 .您可以使用
array2string
函数 - docs .如果数组太大而无法打印,NumPy会自动跳过数组的中心部分并仅打印角:要禁用此行为并强制NumPy打印整个数组,可以使用
set_printoptions
更改打印选项 .or
您也可以参考numpy documentation numpy documentation for "or part"获取更多帮助 .
NumPy 1.15或更新
如果您使用NumPy 1.15(2018-07-23发布)或更新版本,则可以使用
printoptions
上下文管理器:(当然,如果您导入
numpy
的话,请将numpy
替换为np
)使用上下文管理器(
with
-block)可确保在上下文管理器完成后,打印选项将恢复为块启动之前的任何内容 . 它确保设置是临时的,并且仅应用于块内的代码 .有关上下文管理器的详细信息以及它支持的其他参数,请参阅numpy.printoptions documentation .
从最大列数(用
numpy.set_printoptions(threshold=numpy.nan)
固定)补充此answer,还有一个字符限制要显示 . 在某些环境中,比如从bash(而不是交互式会话)调用python时,可以通过设置参数linewidth
来修复此问题 .在这种情况下,您的窗口应限制换行的字符数 .
对于那些使用sublime文本并希望在输出窗口中查看结果的人,您应该将构建选项
"word_wrap": false
添加到sublime-build文件[source] .使用上下文管理器作为Paul Price sugggested
这是一个小小的修改(删除了将附加参数传递给neok的neok答案的选项 .
它显示了如何使用contextlib.contextmanager轻松创建具有较少代码行的上下文管理器:
在您的代码中,它可以像这样使用:
这听起来像你正在使用numpy .
如果是这种情况,您可以添加:
这将禁用角落打印 . 有关更多信息,请参阅NumPy Tutorial .
之前的答案是正确的,但作为一个较弱的替代方案,您可以转换为列表:
numpy.savetxt
或者如果你需要一个字符串:
默认输出格式为:
并且可以使用其他参数进行配置 .
在Python 2.7.12上测试,numpy 1.11.1 .
这是一种一次性的方法,如果您不想更改默认设置,这将非常有用: