1

パイソンの質問:

with open(input, "rt") as f:
X = [map(float, line.split()) for line in f.readlines()[1:R]]  <<problem here
X = asarray(X, dtype=float) 

分数または浮動小数点数のいずれかの数値で構成される .txt ファイルがあります。ここでは、それらを浮動小数点数の配列としてコードに読み込みます。ただし、これは浮動小数点数に対してのみ機能します。入力ファイルの数値の 1 つとして分数を追加すると、エラーが発生します。たとえば、ファイルに数値として 1/4 を追加すると、次のようになります。

     with open(input, "rt") as f:
--->     X = [map(float, line.split()) for line in f.readlines()[1:R]] 
         X = asarray(X, dtype=float)


ValueError: invalid literal for float(): 1/4. 

これを修正するにはどうすればよいですか? (分数と浮動小数点数を読み取り、読み取り時にこれらの分数を浮動小数点数に変換できるようにするため)

4

1 に答える 1

4
>>> from fractions import Fraction
>>> [float(Fraction(x)) for x in '0.25 1/4'.split()]
[0.25, 0.25]

だからあなたが必要です

X = [[float(Fraction(x)) for x in line.split()] for line in f.readlines()[1:R]]

注: ファイル全体の一時的なリストを作成しないようにするには、

from itertools import islice
with open(input, "rt") as f:
    X = [[float(Fraction(x)) for x in line.split()] for line in islice(f, 1, R)]
于 2013-10-24T04:18:31.203 に答える