快速基准测试
安装程序import numpy as np
test_arr = np.random.randint(0, 10000000, 10000000)
1.原始解决方案def last_two_bits(arr_in):
return [bin(num)[-2:].replace('b','0') for num in arr_in]
时间:~5200 msbits_map = ['00','01','10','11']
def last_two_bits_nv(arr_in):
return bits_map[arr_in % 4]
last_two_bits = np.vectorize(last_two_bits_nv)
时间:~2600 ms
3.我对@aminrd的解决方案进行了调整bits_map = np.array(['00', '01', '10', '11'])
def last_two_bits(arr_in):
return bits_map[arr_in % 4]
时间:~170 msdef last_two_bits(arr_in):
return (((arr_in & 1) << 32) + ((arr_in & 2) >> 1) + ord('0') * 0x100000001).view('U2')
时间:~100 msbits_map = np.array(['00', '01', '10', '11'])
def last_two_bits(arr_in):
return bits_map[arr_in & 3]
时间:~60 msdef last_two_bits(arr_in):
output = np.empty((arr_in.size, 2), dtype=np.uint8)
np.bitwise_and(arr_in >> 1, 1, out=output[:, 0], casting='unsafe')
np.bitwise_and(arr_in, 1, out=output[:, 1], casting='unsafe')
output += 48
return output.view(dtype='S2').ravel()
时间:~60 ms