Python 2.7将2d字符串数组转换为浮点数组
问题描述:
我在.txt文件中读取以下字符串Python 2.7将2d字符串数组转换为浮点数组
{{1,2,3,0},{4,5,6,7},{8, -1,9,0}}
使用lin = lin.strip()
以除去 '\ N'
然后我代替{和}至[和]使用
lin = lin.replace ("{", "[")
lin = lin.replace ("}", "]")
我的目标是林转换成浮动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的副本,但似乎没有任何工作。
答
我使用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
答
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]]
虽然这可能不是最完美的解决方案,我认为这是容易跟踪和给你准确的你在找什么。
你期望什么样的浮球?你想获得一系列花车吗? '[[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
可能你最好的选择是使用JSON库: 'import json; json.loads(filecontent)' 这应该给你一个整数数组,你可以用 – Hans
@ 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