Я пишу программу, которая получает неформатированную строку в качестве входных данных и должна выводить массив numpy int.Строка содержит идентификатор, метку времени и т. Д. И шестнадцатеричный массив данных.Скажите, что входная строка data_string = '01190810000235a5000235b4000234c5000211a5'
, тогда 01
- это идентификатор, 190810
- это отметка времени, а 000235a5000235b4000234c5000211a5
- это массив данных со значениями 000235a5, 000235b4, 000234c5, 000211a5
.(Реальная входная строка имеет размер несколько МБ.)
У меня проблемы с преобразованием массива данных в массив целых чисел.Я придумал:
import numpy as np
data_dict['data array'] = np.core.defchararray.asarray(data_string[8:], 8)
но таким образом я получаю только массив строк.Я попытался поиграться с np.fromstring(data_string[8:], np.int32)
, но это изменило заданные значения входной строки.Есть ли способ получить массив int из строки?Использование цикла for (или аналогичных реализаций) не вариант, поскольку этот код критичен к производительности.
РЕДАКТИРОВАТЬ: Чтобы прояснить мою проблему ...
Входная строка
>>> import numpy as np
>>> s = "000235a5000235b4000234c5000211a5"
Преобразование его с np.core.defchararray.asarray()
приводит к chararray
.Но мне нужен массив целочисленных типов.
>>> s1 = np.core.defchararray.asarray(s, 8)
>>> s1
chararray(['000235a5', '000235a5', '000235a5', '000235a5'], dtype='<U8')
Преобразование s
с np.fromstring()
приводит к массиву целых чисел, но, похоже, он не любит шестнадцатеричные числа.
>>> s2 = np.fromstring(s, dtype=np.int32)
>>> s2
array([842018864, 895563059, 842018864, 878851379, 842018864, 895693875,
842018864, 895562033])
array([000235a5, 000235a5, 000235a5, 000235a5])
- это результат, который я действительно хочу получить.