2011-01-30 7 views
8

私は、追加の文字列の内容を持つcsvファイルに2つのnumpy浮動小数点数を書き込む必要があります。したがって、私はsavetxtなどをnumpy.set_printoptions()で使用しないでください。印刷の動作のみを定義できますが、str()の動作は定義できません。私は何かが恋しいことを知っているし、それは難しいことはできませんが、私はinterwebsで合理的な答えを見つけることはありません。多分誰かが私を正しい方向に向けることができます。 HERESにいくつかのサンプルコード: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' 

私は(file.writeする養うことができますきれいにフォーマット文字列に変換するにはどうすればよいnp.float)?

種類について、

fookatchu

答えて

8

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

私はポイントをいただき、ありがとう。それは簡単だろうと思った...他の答えも働く。ありがとうございます! – Fookatchu

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

3

代わりのstr(foo[0])"%.3f" % foo[0]を使用しています。

あなただけの書式設定標準文字列を使用することができます
0

また、あなたが行うことができます:

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

( '%.2f' %x)の上でそれは私のためにいくつかの利点を持っていたとき、私string-a-stf(np.log(0.0))を実行する必要があります。これはnumpyによって "-inf"に正しく処理されるため、ここで気にする必要はありません。

関連する問題