我编写了两个类似的函数,将两个numpy uint16转换为一个uint32。我想测试他们的执行时间,看看哪个更快。结果是不同的,具体取决于首先运行哪个功能。
def int32(x):
return 65536 * x[:, 0] + x[:, 1]
def int32shift(x):
return np.bitwise_or(np.left_shift(x[:, 0], 8), x[:, 1])
def parsePayloadshift(payload):
np_payload = np.fromstring(payload, dtype='>u2').reshape((-1, 38))
flags, t0, t1, data = int32shift(np_payload[:, :2]), int32shift(np_payload[:, 2:4]), int32shift(np_payload[:, 4:6]), np_payload[:, 6:]
def parsePayload(payload):
np_payload = np.fromstring(payload, dtype='>u2').reshape((-1, 38))
flags, t0, t1, data = int32(np_payload[:, :2]), int32(np_payload[:,2:4]), int32(np_payload[:, 4:6]), np_payload[:,6:]
#using multiplication
start_time = time.time()
parsePayload(payload)
end_time = time.time()
time_slice = end_time - start_time
print(time_slice)
# using shift
start_time = time.time()
parsePayloadshift(payload)
end_time = time.time()
time_slice2 = end_time - start_time
print(time_slice2)
我观察到首先运行的功能较慢。因此,我运行了一个代码来测试此序列:
移位,乘法,移位
结果如下:
0.0002779960632324219 #shift
0.00019311904907226562 #multiplication
0.00013971328735351562#再次移位
为什么这个测试会这样?
我应该如何正确测试这些功能,看看哪个更快?