在elasticsearch中,我的一个字段存储了一个浮点值数组。例如,
-0.13672447204589844, 0.18057402968406677, -0.0991324931383133,
我正在尝试检索这些值并将其存储在float数组中。我正在使用以下代码:
res=es.search(index="g6jy834005er",body=data)
arr=[]
for hit in res['hits']['hits']:
r="%(encod)s" % hit["_source"]
print(r)
这会打印出这样的数组:
[[-0.11659730970859528, 0.019643619656562805, 0.08672580868005753]]
[[-0.11659730970859528, 0.019643619656562805, 0.08672580868005753]]
[[-0.11659730970859528, 0.019643619656562805, 0.08672580868005753]]
[[-0.11659730970859528, 0.019643619656562805, 0.08672580868005753]]
当我检查数组的类型时,我使用print(type(r))
<class 'str'>
<class 'str'>
<class 'str'>
我尝试了以下方法将str数组转换为float:
Trial 1
res = [ eval(x[0]) for x in r ]
Trial 2
res = np.asarray(r, dtype=np.float64, order='C')
Trial 3
res = list(map(float,r))
他们都没有工作。如何将str数组转换为float数组?
答案 0 :(得分:1)
使用ast.literal_eval
:
import ast
res=es.search(index="g6jy834005er",body=data)
arr=[]
for hit in res['hits']['hits']:
r="%(encod)s" % hit["_source"]
r=ast.literal_eval(r)
print(r)
现在的类型将是预期的list
,但是如果您想要一个numpy数组:
import ast
res=es.search(index="g6jy834005er",body=data)
arr=[]
for hit in res['hits']['hits']:
r="%(encod)s" % hit["_source"]
r=np.array(ast.literal_eval(r))
print(r)
然后类型将是一个numpy数组。