我试图通过在 numpy 中进行解析/数据积累来加速我去年编写的二进制文件解析器。 numpy 定义自定义数据结构并将数据从二进制文件提取到其中的能力看起来就像我所需要的,除了这些文件中的某些字段是“非标准”长度(例如 6 字节)的无符号整数。由于我使用的是 Python 2.7,所以我制作了自己的 int.from_bytes 模拟版本来处理这些字段,但如果有任何方法可以在 numpy 中将这些字段本地读取为整数,那显然会更快、更可取。
Numpy 不支持任意字节长度的整数,并且使用 ctypes 位域会带来更多麻烦。
我建议使用矢量化切片将数据转换为下一个更高的标准大小整数:
buf = "000000111111222222"
a = np.ndarray(len(buf), np.dtype('>i1'), buf)
e = np.zeros(len(buf) / 6, np.dtype('>i8'))
for i in range(3):
e.view(dtype='>i2')[i + 1::4] = a.view(dtype='>i2')[i::3]
[hex(x) for x in e]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)