2011-01-30 504 views
8

我需要寫一些numpy浮點到一個csv文件,它有額外的字符串內容。因此我不使用savetxt等與numpy.set_printoptions()我只能定義打印行爲,但不是str()行爲。我知道我錯過了一些東西,它不能那麼難,但是我沒有在互聯網上找到合理的答案。也許有人可以指引我正確的方向。繼承人一些示例代碼:如何設置str(numpy.float64)的精度?

In [1]: import numpy as np 
In [2]: foo = np.array([1.22334]) 

In [3]: foo 
Out[3]: array([ 1.22334]) 

In [4]: foo[0] 
Out[4]: 1.2233400000000001 

In [5]: str(foo[0]) 
Out[5]: '1.22334' 

In [6]: np.set_printoptions(precision=3) 

In [7]: foo 
Out[7]: array([ 1.223]) 

In [8]: foo[0] 
Out[8]: 1.2233400000000001 

In [9]: str(foo[0]) 
Out[9]: '1.22334' 

我如何np.float轉換到一個很好的格式化字符串,我可以喂到file.write()?

親切的問候,

fookatchu

回答

8

您可以用標準格式字符串:

>>> x = 1.2345678 
>>> '%.2f' % x 
'1.23' 
+0

我明白了,謝謝。認爲它應該是這麼簡單......其他答案也適用。謝謝大家! – Fookatchu 2011-01-31 10:22:52

6

你可以使用普通的字符串格式化,請參閱: http://docs.python.org/library/string.html#formatspec

例子:

print '{:.2f}'.format(0.1234) # '0.12' 
print '{:.2e}'.format(0.1234) # '1.23e-01' 
+1

您發佈的代碼無效。但鏈接是非常有幫助的!正確的語法應該是:'{0:f}'。format(a [1])。 – Fookatchu 2011-01-31 10:19:06

3

相反的str(foo[0]),使用"%.3f" % foo[0]

0

你也可以這樣做:

precision = 2 
str(np.round(foo[0], precision)) 

它有一定的優勢,我在( '%.2f' %x)的時候我需要做一個字符串(np.log(0.0)),這個字符串被整齊地處理成「-inf」,所以你不必在這裏打擾。