2017-05-09 10 views
0

私は.txtファイルに次の文字列を読み取るfloatにパイソン2.7変換2D文字列配列が配列

{{1,2,3,0}、{4,5,6,7}、{8、 -1,9,0}}

を除去するlin = lin.strip()を用い '\ n' は

そして私は私の目標は、中にLINを変換することである

lin = lin.replace ("{", "[") 

lin = lin.replace ("}", "]") 

を使用して置き換え{と}に【と】 float 2d配列。だから私は

my_matrix = np.array(lin, dtype=float) 

をしましたが、私はエラーメッセージが表示されました:「ValueErrorをは:float型に文字列を変換できませんでした:[[1,2,3,0]、[1,1,1,2]、[0 、-1,3,9]] "

dtypeを削除すると、文字列配列が取得されます。私は既にlinを1.0倍にしようとしましたが、.astype(float)を使ってlinのコピーを作成しましたが、何も動作していないようです。

+0

どのようなフロートが必要ですか?あなたはフロートの配列を取得したいですか? '[[1.0,2.0,3.0,0.0]、[4.0,5.0,6.0,7.0]、[8.0、-1.0,9.0,0.0]]'または何らかの連結 '1230.4567'ですか? – Hans

+0

おそらくあなたの最善の策はJSONライブラリを使うことです: 'import json; json.loads(filecontent) ' これはあなたが計算を行うことができる整数の配列を与える必要があります – Hans

+0

@ kamik423浮動小数点配列[[1.0,2.0,3.0,0.0]、[4.0,5.0、 6.0,7.0]、[8.0、-1.0,9.0,0.0]] – Pat

答えて

0

私はJSONライブラリを使用してファイルの内容を解析し、配列を繰り返し、各要素をfloatに変換しています。しかし、整数の解法では、あなたが望むものにはすでに十分であるかもしれません。それははるかに速く、より短くなります。

import json 

fc = '{{1,2,3,0},{4,5,6,7},{8,-1,9,0}}' 

a = json.loads(fc.replace('{','[').replace('}',']')) 

print(a) # a is now array of integers. this might be enough 

for linenumber, linecontent in enumerate(a): 
    for elementnumber, element in enumerate(linecontent): 
     a[linenumber][elementnumber] = float(element) 

print(a) # a is now array of floats 

短いソリューション

import json 

fc = '{{1,2,3,0},{4,5,6,7},{8,-1,9,0}}' 

a = json.loads(fc.replace('{','[').replace('}',']')) 

print(a) # a is now array of integers. this might be enough 

a = [[float(c) for c in b] for b in a] 

print(a) # a is now array of floats 

(のpython 2と3の両方のために働く)

+0

これは私の一日を保存しました! – Pat

0
import numpy as np 

readStr = "{{1,2,3,0},{4,5,6,7},{8,-1,9,0}}" 
readStr = readStr[2:-2] 
# Originally read string is now -> "1,2,3,0},{4,5,6,7},{8,-1,9,0" 

line = readStr.split("},{") 
# line is now a list object -> ["1,2,3,0", "4,5,6,7", "8,-1,9,0"] 

array = [] 
temp = [] 
# Now we iterate through 'line', convert each element into a list, and 
#  then append said list to 'array' on each iteration of 'line' 
for string in line: 
    num_array = string.split(',') 
    for num in num_array: 
     temp.append(num) 
    array.append(temp) 
    temp = [] 

# Now with 'array' -> [[1,2,3,0], [4,5,6,7], [8,-1,9,0]] 
my_matrix = np.array(array, dtype = float) 

# my_matrix = [[1.0, 2.0, 3.0, 0.0] 
#    [4.0, 5.0, 6.0, 7.0] 
#    [8.0, -1.0, 9.0, 0.0]] 

これが最もエレガントな解決策ではないかもしれないが、私は続くのは簡単だと思いますし、あなたが探しているものを正確に提供します。

関連する問題