如何打印完整的 NumPy 数组而不截断?
当我打印 numpy 数组时,我得到一个截断的表示,但我想要完整的数组。
>>> 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]])
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(23)
对此答案的补充,来自最大列数(用
numpy.set_printoptions(threshold=numpy.nan)修复)
),显示的字符也有限制。在某些环境中,例如从 bash(而不是交互式会话)调用 python 时,可以通过设置参数linewidth
来解决此问题,如下所示。在这种情况下,您的窗口应该限制换行的字符数。
对于那些使用 sublime text 并希望在输出窗口中查看结果的人,您应该将构建选项
"word_wrap": false
添加到 sublime-build 文件 [来源] 。Complementary to this answer from the maximum number of columns (fixed with
numpy.set_printoptions(threshold=numpy.nan)
), there is also a limit of characters to be displayed. In some environments like when calling python from bash (rather than the interactive session), this can be fixed by setting the parameterlinewidth
as following.In this case, your window should limit the number of characters to wrap the line.
For those out there using sublime text and wanting to see results within the output window, you should add the build option
"word_wrap": false
to the sublime-build file [source] .将其关闭并返回正常模式
To turn it off and return to the normal mode
自 NumPy 版本 1.16 起,有关更多详细信息,请参阅 GitHub 票证 12251。
Since NumPy version 1.16, for more details see GitHub ticket 12251.
假设你有一个 numpy 数组
如果你想以一次性的方式打印完整的数组(不切换 np.set_printoptions),但想要比上下文管理器更简单(更少的代码)的东西,只需这样做
Suppose you have a numpy array
If you want to print the full array in a one-off way (without toggling np.set_printoptions), but want something simpler (less code) than the context manager, just do
如果您使用的是 jupyter 笔记本,我发现这是针对一次性情况的最简单的解决方案。基本上将 numpy 数组转换为列表,然后转换为字符串,然后打印。这样做的好处是可以将逗号分隔符保留在数组中,而使用 numpyp.printoptions(threshold=np.inf) 则不会:
If you're using a jupyter notebook, I found this to be the simplest solution for one off cases. Basically convert the numpy array to a list and then to a string and then print. This has the benefit of keeping the comma separators in the array, whereas using
numpyp.printoptions(threshold=np.inf)
does not:这是最黑客的解决方案,它甚至可以像 numpy 一样很好地打印它:
Out:
This is the hackiest solution it even prints it nicely as numpy does:
Out:
您可以使用 array2string 函数 - 文档。
You can use the
array2string
function - docs.您并不总是希望打印所有项目,尤其是对于大型数组。
显示更多项目的简单方法:
当切片数组 < 时效果很好。默认为 1000。
You won't always want all items printed, especially for large arrays.
A simple way to show more items:
It works fine when sliced array < 1000 by default.
如果您使用的是 Jupyter,请尝试变量检查器扩展。您可以单击每个变量来查看整个数组。
If you are using Jupyter, try the variable inspector extension. You can click each variable to see the entire array.
matrepr 将打印禁用
max_rows
和max_cols 的整个数组
限制:结果的前几行:
matrepr will print the entire array with disabled
max_rows
andmax_cols
limits:First few lines of the result:
如果数组太大而无法打印,NumPy 会自动跳过数组的中心部分,只打印角点:
要禁用此行为并强制 NumPy 打印整个数组,您可以使用
set_printoptions
更改打印选项。或
您还可以参考numpy 文档 numpy 文档“或部分” 以获得更多帮助。
If an array is too large to be printed, NumPy automatically skips the central part of the array and only prints the corners:
To disable this behaviour and force NumPy to print the entire array, you can change the printing options using
set_printoptions
.or
You can also refer to the numpy documentation numpy documentation for "or part" for more help.
如果您有 pandas 可用,
可以避免需要重置 numpy.set_printoptions(threshold=sys.maxsize) 的副作用,并且您不会获得 numpy.array 和括号。我发现这可以方便地将宽数组转储到日志文件中
If you have pandas available,
avoids the side effect of requiring a reset of
numpy.set_printoptions(threshold=sys.maxsize)
and you don't get the numpy.array and brackets. I find this convenient for dumping a wide array into a log file使用
numpy.set_printoptions
:Use
numpy.set_printoptions
:我建议使用
np.inf
而不是其他人建议的np.nan
。它们都适合您的目的,但是通过将阈值设置为“无穷大”,每个阅读您的代码的人都可以明显看出您的意思。对我来说,“不是数字”的门槛似乎有点模糊。I suggest using
np.inf
instead ofnp.nan
which is suggested by others. They both work for your purpose, but by setting the threshold to "infinity" it is obvious to everybody reading your code what you mean. Having a threshold of "not a number" seems a little vague to me.临时设置
您可以使用
printoptions
上下文管理器:(当然,如果您是这样导入
numpy
的,请将numpy
替换为np
code>)上下文管理器(
with
-块)的使用确保上下文管理器完成后,打印选项将恢复到块开始之前的状态。它确保设置是临时的,并且仅应用于块内的代码。请参阅
numpy.printoptions
文档有关上下文管理器的详细信息以及它支持的其他参数。它在 NumPy 1.15(2018-07-23 发布)中引入。Temporary setting
You can use the
printoptions
context manager:(of course, replace
numpy
bynp
if that's how you importednumpy
)The use of a context manager (the
with
-block) ensures that after the context manager is finished, the print options will revert to whatever they were before the block started. It ensures the setting is temporary, and only applied to code within the block.See
numpy.printoptions
documentation for details on the context manager and what other arguments it supports. It was introduced in NumPy 1.15 (released 2018-07-23).前面的答案是正确的,但作为较弱的替代方案,您可以将其转换为列表:
The previous answers are the correct ones, but as a weaker alternative you can transform into a list:
这是执行此操作的一次性方法,如果您不想更改默认设置,则此方法很有用:
Here is a one-off way to do this, which is useful if you don't want to change your default settings:
这听起来像是你正在使用 numpy.
如果是这种情况,您可以添加:
这将禁用角打印。有关详细信息,请参阅此 NumPy 教程。
This sounds like you're using numpy.
If that's the case, you can add:
That will disable the corner printing. For more information, see this NumPy Tutorial.
按照 Paul Price 建议使用上下文管理器
Using a context manager as Paul Price sugggested
numpy.savetxt
或者如果您需要字符串:
默认输出格式为:
并且可以使用更多参数进行配置。
特别注意,这也不显示方括号,并允许进行大量自定义,如以下所述: 如何打印不带括号的 Numpy 数组?
在 Python 2.7.12、numpy 1.11.1 上测试。
numpy.savetxt
or if you need a string:
The default output format is:
and it can be configured with further arguments.
Note in particular how this also not shows the square brackets, and allows for a lot of customization, as mentioned at: How to print a Numpy array without brackets?
Tested on Python 2.7.12, numpy 1.11.1.
稍作修改:(因为您要打印一个巨大的列表)
这将增加每行的字符数(默认线宽为 75)。使用适合您的编码环境的任何线宽值。这将使您不必通过在每行添加更多字符来处理大量输出行。
A slight modification: (since you are going to print a huge list)
This will increase the number of characters per line (default linewidth of 75). Use any value you like for the linewidth which suits your coding environment. This will save you from having to go through huge number of output lines by adding more characters per line.
这是 neok 的轻微修改(删除了向
set_printoptions 传递附加参数的选项)
回答。它展示了如何使用
contextlib.contextmanager
以更少的代码行轻松创建这样的上下文管理器:在您的代码中可以像这样使用它:
This is a slight modification (removed the option to pass additional arguments to
set_printoptions)
of neoks answer.It shows how you can use
contextlib.contextmanager
to easily create such a contextmanager with fewer lines of code:In your code it can be used like this:
将 50 更改为您想要看到的行数
来源: 此处
Change 50 to how many lines you wanna see
Source: here