为什么两个函数的执行时间取决于代码顺序?

时间:2019-05-07 19:48:38

标签: python python-3.x performance time

我编写了两个类似的函数,将两个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#再次移位

为什么这个测试会这样?
我应该如何正确测试这些功能,看看哪个更快?

0 个答案:

没有答案