当我遇到性能问题时,我只是更改了一个正在编写的程序,以将数据存储为numpy数组,而两者之间的区别令人难以置信。最初耗时30分钟,而现在耗时2.5秒!
我想知道它是如何做到的。我认为这是因为它消除了对for循环的需要,但除此之外,我感到很困惑。
for
块状阵列是均质类型的密集堆积阵列。相比之下,Python列表是指向对象的指针数组,即使它们都属于同一类型。因此,您可以获得引用局部性的好处。
同样,许多Numpy操作都用C实现,从而避免了Python中循环,指针间接寻址和逐元素动态类型检查的一般开销。速度的提高取决于您执行的操作,但是在数字运算程序中,几个数量级的情况并不少见。