如何将具有十六进制值的未格式化字符串转换为numpy int数组?

2024-03-28 21:32:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个程序,它获取一个未格式化的字符串作为输入,并应该输出一个numpy int数组。 字符串包含id、时间戳等和一个十六进制数据数组。假设输入字符串是data_string = '01190810000235a5000235b4000234c5000211a5',那么01是id,190810是时间戳,000235a5000235b4000234c5000211a5是值为000235a5, 000235b4, 000234c5, 000211a5的数据数组。(实际输入字符串的大小为几MB。)

我在将数据数组转换为numpy整数数组时遇到问题。我想出了:

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循环(或类似的实现)不是一个选项,因为此代码对性能至关重要。在

编辑: 为了澄清我的问题。。。在

输入字符串是

^{pr2}$

np.core.defchararray.asarray()转换它会得到一个chararray。但是我想要一个整数类型的数组。在

>>> s1 = np.core.defchararray.asarray(s, 8)
>>> s1
chararray(['000235a5', '000235a5', '000235a5', '000235a5'], dtype='<U8')

np.fromstring()转换s将得到一个整数数组,但它似乎不喜欢十六进制数。在

>>> s2 = np.fromstring(s, dtype=np.int32)
>>> s2
array([842018864, 895563059, 842018864, 878851379, 842018864, 895693875,
       842018864, 895562033])

array([000235a5, 000235a5, 000235a5, 000235a5])是我真正想要得到的结果。在


Tags: 数据字符串corenumpyiddatastringnp