Python получает float как массив float от эластичного поиска - PullRequest
0 голосов
/ 27 января 2019

В эластичном поиске одно из моих полей хранит массив значений с плавающей запятой. Например,

-0.13672447204589844, 0.18057402968406677, -0.0991324931383133,

Я пытаюсь получить эти значения и сохранить их в массиве с плавающей точкой. Я использую следующий код:

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?

1 Ответ

0 голосов
/ 27 января 2019

Использовать 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...