我有一个numpy数组 [2.15295647e + 01,8.12531501e + 00,3.97113829e + 00,1.00777250e + 01] 并希望格式化它,使它看起来像这样 [21.53,08.13,03.97,10.08]
float_formatter = lambda x: "%.2f" % x
np.set_printoptions(formatter={'float_kind':float_formatter})
如何调整此项以包含2次浮动操作?
我需要像%02d%。2f%(x,y)这样的东西,但不知道如何更改lambda函数来执行此操作。
答案 0 :(得分:1)
如果你想在lambda中使用两个浮点数,你需要两个输入参数:
float_formatter = lambda x, y: "%.2f %.2f" % (x, y)
您可以为lambda表达式定义多个输入,而不仅仅是单个输入,名称是任意的。不同的参数名称也是如此。
float_formatter = lambda float_one, float_two: "%.2f %.2f" % (float_one, float_two)
答案 1 :(得分:1)
据我所知,您只需要用两个前导零填充数组值并打印到两个小数位。您需要做的就是修改格式化字符串:
In [1]: "%05.2f" %np.pi
Out[1]: '03.14'
要解决此问题,5
表示格式化字符串的总长度为5个字符(包括小数点),0
表示您要使用前导零填充,以及.2
表示您希望小数点后面有两个数字。
所以如果你想要,比如3个前导零和4个小数位,你会这样做:
In [2]: "%08.4f" %np.pi
Out[2]: '003.1416
如果您只想填充前导空格而不是零,则可以省略总长度前面的0
:
In [3]: "%8.4f" %np.pi
Out[3]: ' 3.1416'
您可以在table of conversion flags here中了解其他选项。
要将其设置为新的格式化程序,您只需执行以下操作:
In [4]: float_formatter = lambda x: "%05.2f" %x
In [5]: np.set_printoptions(formatter={'float_kind':float_formatter})
答案 2 :(得分:0)
要更改列表中的值,您可以使用列表推导。 Python 3示例如下。
import numpy as np
precision = 2
formatter = "{0:."+str(precision)+"f}"
a = np.array([2.15295647e+01, 8.12531501e+00, 3.97113829e+00, 1.00777250e+01])
aFormat = np.array([float(formatter.format(i)) for i in a])
print(a, aFormat)
我首先尝试了癫痫鱼的选项,但是打印机功能没有给你一个阵列。它只是给你一个浮动。因此,如果您真的想要更改2d numpy矩阵的打印选项,则必须使用外部计数器定义自己的函数,以确定格式化哪个值。下面的示例显示了这个类,因为您不希望外部计数器是全局的。
import numpy
class npPrint(object):
def __init__(self):
self.counter = 0
self.precision = 2
# end Constructor
def printer(self, x):
self.precision = 2
if self.counter == 0:
formatter = "{0:."+str(self.precision)+"f}"
self.counter += 1
else:
formatter = "{0:0"+str(self.precision)+"d}"
x = int(round(x))
self.counter = 0
return formatter.format(x)
# end printer
formatter = npPrint()
a = numpy.array([[2.15295647e+01, 8.12531501e+00], [3.97113829e+00, 1.00777250e+01]])
numpy.set_printoptions(formatter={"float_kind": lambda x, f=formatter: f.printer(x)})
print(a)
你必须有一个计数器,因为你不知道你是否交了x值或y值。你只是收到一个浮动。这真的很难看。如果我是你,我会自己处理打印并拆分2d矩阵。