【发布时间】:2022-01-07 12:51:30
【问题描述】:
我有一个操作要在 python 中应用于超过 1000 万个值。我的问题是优化实际操作。 我有 2 种工作方法,numpy 和 python vanilla。
Python 原版操作:
- 1:我的原始值为 4
byte数据:b'\x9a#\xe6\x00'=[154, 35, 230, 0]=[0x9A, 0x23, 0xE6, 0x00] - 2:我取最后一个字节放在最前面:
b'\x00\x9a#\xe6'=[0, 154, 35, 230]=[0x00, 0x9A, 0x23, 0xE6] - 3:我将其转换为 int32 有符号值:
-433874432
文件加载:
f = open(path_data, "rb")
while trame := f.read(4):
数据操作:
trame = b'\x9a#\xe6\x00'
trame_list = list(trame) # [154, 35, 230, 0]
trame_list_swap = [trame_list[-1]] + trame_list[:-1]
trame_swap = bytes(trame_list_swap)
result = int.from_bytes(trame_swap, byteorder='little', signed=True)
Numpy 操作
文件加载:
datas_raw = numpy.fromfile(path_data, dtype="<i4")
# datas_raw = numpy.array([-1708923392, 1639068928, 2024603392, ...]) # len(datas_raw) = 12171264
for i, trame in enumerate(datas_raw):
数据操作:
trame = 15082394
tmp = list(trame.tobytes("C"))
tmp.insert(0, tmp.pop())
result = numpy.ndarray(1, "<i", bytes(tmp))[0]
由于numpy.ndarray 被触发了 1000 万次,它的处理速度与原版相同,但速度较慢...
问题
我的问题如下:
我希望 numpy 版本在没有 for loop 的情况下对所有值进行按位运算(在 python 中非常慢)......欢迎任何其他解决方案(不是关闭 XY 问题......)
【问题讨论】:
标签: python numpy binary binaryfiles byte-shifting