numpy数组访问条件比具有直接值的条件慢得多

时间:2017-04-07 01:37:54

标签: python arrays performance numpy

在我的代码中进行一些优化时,我注意到以下速度影响。

在条件中似乎存在一个非常缓慢的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

0 个答案:

没有答案