我有一个操作可以在 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 问题...)