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

Python 条件下的numpy数组访问速度比具有直接值的条件慢得多,python,arrays,performance,numpy,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

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

在这种情况下,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。为什么第三次手术比第一次和第二次手术要花这么长时间?在这一点上有没有办法提高性能?

我预料到,复杂性不知何故是第一种和第二种情况的叠加

2。类似的奇怪事情发生在下面的例子中。为什么转换为布尔值和真/假检查要快得多?

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

除非我遗漏了什么,否则您所介绍的任何内容都不表明索引有什么慢的地方,只是关于涉及np.int8(可能还有其他类型)的比较。是什么让你认为涉及到数组访问?部分原因是比较
numpy
数字类型,比如
np.int8
np.int32
或你所拥有的其他类型,与Python
int
s或
float
s,甚至两种不同的
numpy
数字进行比较会很慢。比较:
timeit(“1==i”,“导入numpy作为np;i=np.int32(1)”)
timeit(“j==i”,“导入numpy作为np;i=np.int32(1);j=np.int32(5)”)
@juanpa.arrivillaga谢谢,这是解决方案。我没有意识到,我比较了不同的类型。你的榜样很有魅力。:)@DSM我只是误解了那里发生的事情。我认为
-1
-1<2
之间的区别只是数组索引。
1.711371619476168
23.579222465618702