在我的代码中进行一些优化时,我注意到以下速度影响。
在条件中似乎存在一个非常缓慢的numpy数组访问:
print(timeit("i = k[5,5]", setup="import numpy as np; k = np.ndarray((13,17), np.int8)", number=10000000))
print(timeit("i = k; -1 < i", setup="k = 2", number=10000000))
print(timeit("i = k[5,5]; -1 < i", setup="import numpy as np; k = np.ndarray((13,17), np.int8); k[5,5] = 2", number=10000000))
输出如下
1.7849165841960317
0.6219190885851991
24.763694140816604
我的问题:
1。为什么第三次操作比第一次和第二次操作花费的时间更长?那么有没有办法提高性能?
我预料到,复杂性在某种程度上是第一种和第二种情况的加成。
2。在以下情况下类似的奇怪的事情。为什么转换为布尔值和True / False检查更快?
print(timeit("not k[5,5]", setup="import numpy as np; k = np.ndarray((13,17), np.int8); k[5,5] = 0", number=10000000))
print(timeit("k[5,5] == 0", setup="import numpy as np; k = np.ndarray((13,17), np.int8); k[5,5] = 0", number=10000000))
带输出:
1.711371619476168
23.579222465618702