How to print the full NumPy array, without truncation?
当我打印一个numpy数组时,会得到一个截断的表示,但我需要完整的数组。
有什么办法吗?
实例:
1 2 3 4 5 6 7 8 9 10 11 | >>> 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]]) |
使用
1 2 3 | import sys import numpy numpy.set_printoptions(threshold=sys.maxsize) |
1 2 | import numpy as np np.set_printoptions(threshold=np.inf) |
我建议使用
前面的答案是正确的,但是作为一个较弱的选择,您可以转换成一个列表:
1 2 3 4 5 6 7 | >>> numpy.arange(100).reshape(25,4).tolist() [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23], [24, 25, 26, 27], [28, 29, 30, 31], [32, 33, 34, 35], [36, 37, 38, 39], [40, 41, 42, 43], [44, 45, 46, 47], [48, 49, 50, 51], [52, 53, 54, 55], [56, 57, 58, 59], [60, 61, 62, 63], [64, 65, 66, 67], [68, 69, 70, 71], [72, 73, 74, 75], [76, 77, 78, 79], [80, 81, 82, 83], [84, 85, 86, 87], [88, 89, 90, 91], [92, 93, 94, 95], [96, 97, 98, 99]] |
这听起来像是你在用麻药。
如果是这样,您可以添加:
1 2 | import numpy as np np.set_printoptions(threshold=np.nan) |
这将禁用角打印。有关详细信息,请参见本numpy教程。
这是一种一次性的方法,如果您不想更改默认设置,这很有用:
1 2 3 4 5 6 7 | def fullprint(*args, **kwargs): from pprint import pprint import numpy opt = numpy.get_printoptions() numpy.set_printoptions(threshold='nan') pprint(*args, **kwargs) numpy.set_printoptions(**opt) |
使用上下文管理器作为Paul Price建议
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | import numpy as np class fullprint: 'context manager for printing full numpy arrays' def __init__(self, **kwargs): kwargs.setdefault('threshold', np.inf) self.opt = kwargs def __enter__(self): self._opt = np.get_printoptions() np.set_printoptions(**self.opt) def __exit__(self, type, value, traceback): np.set_printoptions(**self._opt) a = np.arange(1001) with fullprint(): print(a) print(a) with fullprint(threshold=None, edgeitems=10): print(a) |
numpy 1.15或更新版本
如果您使用numpy 1.15(发布于2018-07-23)或更新版本,则可以使用
1 2 | with numpy.printoptions(threshold=numpy.inf): print(arr) |
(当然,如果你进口了
使用上下文管理器(
有关上下文管理器及其支持的其他参数的详细信息,请参阅
1 | numpy.savetxt(sys.stdout, numpy.arange(10000)) |
或者,如果需要字符串:
1 2 3 4 5 | import StringIO sio = StringIO.StringIO() numpy.savetxt(sio, numpy.arange(10000)) s = sio.getvalue() print s |
默认输出格式为:
1 2 3 4 5 | 0.000000000000000000e+00 1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00 ... |
它还可以配置其他参数。
在python 2.7.12、numpy 1.11.1上测试。
这是一个小小的修改(删除了向Neoks答案的
它显示了如何使用
1 2 3 4 5 6 7 8 9 10 11 | import numpy as np from contextlib import contextmanager @contextmanager def show_complete_array(): oldoptions = np.get_printoptions() np.set_printoptions(threshold=np.inf) try: yield finally: np.set_printoptions(**oldoptions) |
在代码中可以这样使用:
1 2 3 4 5 6 7 8 | a = np.arange(1001) print(a) # shows the truncated array with show_complete_array(): print(a) # shows the complete array print(a) # shows the truncated array (again) |
与此答案的最大列数(用
1 2 3 4 | import numpy as np np.set_printoptions(linewidth=2000) # default = 75 Mat = np.arange(20000,20150).reshape(2,75) # 150 elements (75 columns) print(Mat) |
在这种情况下,窗口应该限制换行的字符数。
对于那些使用Sublime文本并希望在输出窗口中看到结果的用户,应该将构建选项
假设你有一个麻木的数组
1 | arr = numpy.arange(10000).reshape(250,40) |
如果要一次性打印整个数组(不切换np.set_printOptions),但要比上下文管理器更简单(代码更少),只需执行
1 2 | for row in arr: print row |
您不会总是希望打印所有项目,尤其是对于大型数组。
显示更多项目的简单方法:
1 2 3 4 5 6 7 8 9 10 | In [349]: ar Out[349]: array([1, 1, 1, ..., 0, 0, 0]) In [350]: ar[:100] Out[350]: array([1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1]) |
默认情况下,当切片数组小于1000时,它工作正常。
自numpy版本1.16以来,有关更多详细信息,请参阅github票据12251。
1 2 3 4 | from sys import maxsize from numpy import set_printoptions set_printoptions(threshold=maxsize) |
您可以使用
1 2 3 | a = numpy.arange(10000).reshape(250,40) print(numpy.array2string(a, threshold=numpy.nan, max_line_width=numpy.nan)) # [Big output] |
如果数组太大而无法打印,numpy会自动跳过数组的中心部分,只打印角:要禁用此行为并强制numpy打印整个数组,可以使用
1 | >>> np.set_printoptions(threshold='nan') |
或
1 2 3 | >>> np.set_printoptions(edgeitems=3,infstr='inf', ... linewidth=75, nanstr='nan', precision=8, ... suppress=False, threshold=1000, formatter=None) |
您也可以参考numpy文档numpy文档获得更多帮助。