追加の文字列コンテンツを含むcsvファイルにいくつかのnumpyfloatを書き込む必要があります。したがって、numpy.set_printoptions()でsavetxtなどを使用しないでください。印刷動作のみを定義できますが、str()動作は定義できません。私は何かが恋しいことを知っています、そしてそれはそれほど難しいことではありません、しかし私はインターウェブ上で合理的な答えを見つけられません。多分誰かが私を正しい方向に向けることができます。ここにいくつかのサンプルコードがあります:
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
標準の文字列フォーマットを使用できます。
>>> x = 1.2345678
>>> '%.2f' % x
'1.23'
通常の文字列フォーマットを使用できます。以下を参照してください。 http://docs.python.org/library/string.html#formatspec
例:
print '{:.2f}'.format(0.1234) # '0.12'
print '{:.2e}'.format(0.1234) # '1.23e-01'
Numpy 1.14以降には format_float_positional
および format_float_scientific
浮動小数点スカラーを、丸め、トリミング、およびパディングを制御して、位置表記または科学表記の10進文字列としてフォーマットする関数。これらの関数は、従来のPython文字列フォーマッタよりもはるかに多くのフォーマット制御を提供します。
import numpy as np
x = np.float64('1.2345678')
print(np.format_float_positional(x)) # 1.2345678
print(np.format_float_positional(x, precision=3)) # 1.235
print(np.format_float_positional(np.float16(x))) # 1.234
print(np.format_float_positional(np.float16(x), unique=False, precision=8)) # 1.23437500
y = x / 1e8
print(np.format_float_scientific(y)) # 1.2345678e-08
print(np.format_float_scientific(y, precision=3, exp_digits=1)) # 1.235e-8
等.
これらの高度なフォーマッターは、Dragon4アルゴリズムに基づいています。この件について詳しくは、Ryan Juckettの 浮動小数点数の印刷 を参照してください。
str(foo[0])
の代わりに、"%.3f" % foo[0]
を使用してください。
また、次のことができます。
precision = 2
str(np.round(foo[0], precision))
Numpyによって「-inf」にきちんと処理されるstr(np.log(0.0))を文字列化する必要がある場合、( '%。2f'%x)よりもいくつかの利点がありました。ここで気になります。