Я написал две аналогичные функции, которые сводят два клочковых 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 # смена
0,00019311904907226562 # умножение
0.00013971328735351562 # снова сдвиг
Почему этот тест ведет себя таким образом?
Как правильно проверить эти функции, чтобы узнать, какая из них быстрее?