【发布时间】:2016-08-16 06:39:17
【问题描述】:
我正在尝试加快我的脚本速度。它基本上读取带有 Velodyne 的 Lidar HDL-32 信息的 pcap 文件,并允许我获取 X、Y、Z 和强度值。我已经使用python -m cProfile ./spTestPcapToLas.py 分析了我的脚本,它在我的readDataPacket() 函数调用中花费的时间最多。在一个小型测试(80 MB 文件)中,解包部分大约需要 56% 的执行时间。
我这样调用readDataPacket函数(chunk指的是pcap文件):
packets = []
for packet in chunk:
memoryView = memoryview(packet.raw())
udpDestinationPort = unpack('!h', memoryView[36:38].tobytes())[0]
if udpDestinationPort == 2368:
packets += readDataPacket(memoryView)
readDataPacket() 函数本身是这样定义的:
def readDataPacket(memoryView):
firingData = memoryView[42:]
firingDataStartingByte = 0
laserBlock = []
for i in xrange(firingBlocks):
rotational = unpack('<H', firingData[firingDataStartingByte+2:firingDataStartingByte+4])[0]
startingByte = firingDataStartingByte+4
laser = []
for j in xrange(lasers):
distanceInformation = unpack('<H', firingData[startingByte:(startingByte + 2)])[0] * 0.002
intensity = unpack('<B', firingData[(startingByte + 2)])[0]
laser.append([distanceInformation, intensity])
startingByte += 3
firingDataStartingByte += 100
laserBlock.append([rotational, laser])
return laserBlock
关于如何加快流程的任何想法?顺便说一句,我使用 numpy 进行 X、Y、Z、强度计算。
【问题讨论】:
标签: python performance numpy unpack lidar