Как преобразовать неформатированную строку с шестнадцатеричными значениями в массив numpy int? - PullRequest
1 голос
/ 23 сентября 2019

Я пишу программу, которая получает неформатированную строку в качестве входных данных и должна выводить массив 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]) - это результат, который я действительно хочу получить.

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