2014-01-09 63 views
2

我有一個numpy數組 [2.15295647e + 01,8.12531501e + 00,3.97113829e + 00,1.00777250e + 01] 並且想格式化它它看起來像這樣 [21.53,08.13,03.97,10.08]Python:如何做一個浮點格式與1 lambda函數

float_formatter = lambda x: "%.2f" % x 
np.set_printoptions(formatter={'float_kind':float_formatter}) 

如何調整這個包含2點浮動的操作?

我需要類似%02d%.2f%(x,y)但不知道如何改變lambda函數來做到這一點。

+3

問題的後半部分(「2個浮點操作」)似乎並沒有以任何方式進行相關的第一部分。第二部分的輸入是什麼樣的?預期產出是多少? –

回答

1

如果你想在你的拉姆達兩個浮體的工作,你需要兩個輸入參數是這樣的:

float_formatter = lambda x, y: "%.2f %.2f" % (x, y) 

可以定義多個輸入lambda表達式,而不僅僅是一個單一的和名稱是任意的。這裏有不同的參數名稱。

float_formatter = lambda float_one, float_two: "%.2f %.2f" % (float_one, float_two) 
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) 

我第一次嘗試過癲癇魚的選擇,但打印機功能並沒有給你一個數組。它只是給你一個浮動。所以,如果你真的想改變二維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矩陣。

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})