python numpy格式化打印的实例
1.问题描述
在使用numpy的时候,我们经常在debug的时候将numpy数组打印下来,但是有的时候数组里面都是小数,数组又比较大,打印下来的时候非常不适合观察。这里主要讲一下如何让numpy打印的结果更加简洁
2.问题解决
这里需要使用numpy的set_printoptions函数,对应numpy源码如下所示:
defset_printoptions(precision=None,threshold=None,edgeitems=None, linewidth=None,suppress=None, nanstr=None,infstr=None, formatter=None): """ Setprintingoptions. Theseoptionsdeterminethewayfloatingpointnumbers,arraysand otherNumPyobjectsaredisplayed. Parameters ---------- precision:int,optional Numberofdigitsofprecisionforfloatingpointoutput(default8). threshold:int,optional Totalnumberofarrayelementswhichtriggersummarization ratherthanfullrepr(default1000). edgeitems:int,optional Numberofarrayitemsinsummaryatbeginningandendof eachdimension(default3). linewidth:int,optional Thenumberofcharactersperlineforthepurposeofinserting linebreaks(default75). suppress:bool,optional Whetherornotsuppressprintingofsmallfloatingpointvalues usingscientificnotation(defaultFalse). nanstr:str,optional Stringrepresentationoffloatingpointnot-a-number(defaultnan). infstr:str,optional Stringrepresentationoffloatingpointinfinity(defaultinf). formatter:dictofcallables,optional
这里我们主要用到其中的两个属性:
设置precision来控制小数点后面最多显示的位数
设置suppress来取消使用科学计数法
2.1简单示例
一个简单的利用set_printoptions的例子如下所示:
importnumpyasnp a=np.random.random(3) print('beforesetoptions:\n{}'.format(a)) np.set_printoptions(precision=3,suppress=True) print('aftersetoptions:\n{}'.format(a)) >>> beforesetoptions: [0.058563480.54170390.76520603] aftersetoptions: [0.0590.5420.765]
可以看到,设置了打印的options之后,打印下来的结果简洁了很多,绝大多数时候我们只需要观察简洁的打印结果,太过精确的结果反而会因为占位太长不易于观察
2.2完整示例
2.1的例子中存在的一个问题是,一旦我们在程序的某一行设置了printoptions之后,接下来所有的打印过程都会受到影响,然而有的时候我们并不希望如此,这个时候我们可以添加一个上下文管理器,只在规定的上下文环境当中设置我们需要的打印参数,其他地方仍然使用默认的打印参数,代码如下:
importnumpyasnp fromcontextlibimportcontextmanager @contextmanager defprintoptions(*args,**kwargs): original_options=np.get_printoptions() np.set_printoptions(*args,**kwargs) try: yield finally: np.set_printoptions(**original_options) x=np.random.random(3) y=np.array([1.5e-2,1.5,1500]) print('-----------beforesetoptions-----------') print('x={}'.format(x)) print('y={}'.format(y)) withprintoptions(precision=3,suppress=True): print('------------setoptions------------') print('x={}'.format(x)) print('y={}'.format(y)) print('---------------setbackoptions-------------') print('x={}'.format(x)) print('y={}'.format(y)) >>> -----------beforesetoptions----------- x=[0.38023710.79297810.14008782] y=[1.50000000e-021.50000000e+001.50000000e+03] ------------setoptions------------ x=[0.380.7930.14] y=[0.0151.51500.] ---------------setbackoptions------------- x=[0.38023710.79297810.14008782] y=[1.50000000e-021.50000000e+001.50000000e+03]
上面的程序中,我们通过使用contextlib里面的contextmanager为函数set_printoptions设置了上下文,在执行with里面的代码之前,设置打印的参数为precison=3,suppress=True,当跳出with代码块的时候,将打印参数设置为原来默认的打印参数。
这篇pythonnumpy格式化打印的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。