我正在尝试使用以下函数将字符串数组转换为浮点数组:
arr_str = '[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]'
a1 = arr_str.split()
[int(x) for x in a1]
但抛出错误:
<
ipython-input-57-f7f1eaba7ebd> in <listcomp>(.0)
3 a1 = arr_str.split()
4
----> 5 [int(x) for x in a1]
6
7 # for a in arr_str.split():
ValueError: invalid literal for int() with base 10: '[1'
应该预处理字符串并删除'['和']'?
答案 0 :(得分:3)
一种方法是使用ast.literal_eval
。
如果你需要一个numpy
整数数组,转换是微不足道的。
import numpy as np
from ast import literal_eval
arr_str = '[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]'
res = literal_eval(arr_str.replace(' ', ','))
# [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
res_np = np.array(res)
# array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
答案 1 :(得分:0)
arr_str = arr_str.strip("[]")
voila = [int(x) for x in arr_str.split()]
编辑1:对变量赋值迂腐。
答案 2 :(得分:0)
您可以使用ast
模块:
import ast
arr_str = '[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]'
arr = ast.literal_eval(arr_str.replace(" ",", "))
arr = list(map(float,arr)) #Remove this line if you wish integer conversion.
print(arr)
输出:
[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
因为您在标题中说int
,但在说明中说float
。