如何在没有科学符号和给定精度的情况下漂亮地打印numpy.array?

我很好奇,是否有任何打印格式化的方法numpy.arrays" title="arrays">arrays,例如,类似于以下方式:

x = 1.23456

print '%.3f' % x

如果我想打印numpy.array浮点数,它会以“科学”格式打印几位小数,即使对于低维数组也很难阅读。但是,numpy.array显然必须将其打印为字符串,即使用%s。有解决方案吗?

回答:

你可以set_printoptions用来设置输出的精度:

import numpy as np

x=np.random.random(10)

print(x)

# [ 0.07837821 0.48002108 0.41274116 0.82993414 0.77610352 0.1023732

# 0.51303098 0.4617183 0.33487207 0.71162095]

np.set_printoptions(precision=3)

print(x)

# [ 0.078 0.48 0.413 0.83 0.776 0.102 0.513 0.462 0.335 0.712]

suppress禁止对小数使用科学计数法:

y=np.array([1.5e-10,1.5,1500])

print(y)

# [ 1.500e-10 1.500e+00 1.500e+03]

np.set_printoptions(suppress=True)

print(y)

# [ 0. 1.5 1500. ]

有关其他选项,请参见文档中的set_printoptions

要使用NumPy 1.15.0或更高版本在本地应用打印选项,可以使用numpy.printoptions上下文管理器。例如,在with-suite precision=3suppress=True内设置:

x = np.random.random(10)

with np.printoptions(precision=3, suppress=True):

print(x)

# [ 0.073 0.461 0.689 0.754 0.624 0.901 0.049 0.582 0.557 0.348]

但是在with-suite打印选项之外,将恢复为默认设置:

print(x)    

# [ 0.07334334 0.46132615 0.68935231 0.75379645 0.62424021 0.90115836

# 0.04879837 0.58207504 0.55694118 0.34768638]

如果你使用的是NumPy的早期版本,则可以自己创建上下文管理器。例如,

import numpy as np

import contextlib

@contextlib.contextmanager

def printoptions(*args, **kwargs):

original = np.get_printoptions()

np.set_printoptions(*args, **kwargs)

try:

yield

finally:

np.set_printoptions(**original)

x = np.random.random(10)

with printoptions(precision=3, suppress=True):

print(x)

# [ 0.073 0.461 0.689 0.754 0.624 0.901 0.049 0.582 0.557 0.348]

为防止浮点数结尾处的零被剥离:

np.set_printoptions现在有一个formatter参数,可让你为每种类型指定格式功能。

np.set_printoptions(formatter={'float': '{: 0.3f}'.format})

print(x)

哪个打印

[ 0.078  0.480  0.413  0.830  0.776  0.102  0.513  0.462  0.335  0.712]

代替

[ 0.078  0.48   0.413  0.83   0.776  0.102  0.513  0.462  0.335  0.712]

以上是 如何在没有科学符号和给定精度的情况下漂亮地打印numpy.array? 的全部内容, 来源链接: utcz.com/qa/405382.html

回到顶部