在哪些方面,Numpy的速度反而比不上原始Python
展开全部
很有意思的结果。我不清楚numpy数组在哪些场合下慢过list,不过纠正一下题主的误解。
python的list实现不是链表,而是动态数组。动态数组append/pop的均摊时间复杂度为O(1),而按下标随机访问跟一般数组无异,时间复杂度严格为O(1)。C++ STL中的vector也是动态数组。当然,从非尾部增删元素也是支持的,虽然慢就是了,应避免。
关于python各种内建类型操作的时间复杂度,可参考TimeComplexity
关于动态数组,可参考Dynamic array
另外numpy数组单个元素随机访问比list慢没啥大不了的,后者是python实现内建,前者还有ffi的开销。numpy快的地方在于可以整向量/整矩阵地做算术运算,中间省了许多开销。你写个list comprehension来用list模拟向量算术,再来跟numpy比,会有质的不同。哪怕没链MKL优化的numpy也能把list爆出翔。
python的list实现不是链表,而是动态数组。动态数组append/pop的均摊时间复杂度为O(1),而按下标随机访问跟一般数组无异,时间复杂度严格为O(1)。C++ STL中的vector也是动态数组。当然,从非尾部增删元素也是支持的,虽然慢就是了,应避免。
关于python各种内建类型操作的时间复杂度,可参考TimeComplexity
关于动态数组,可参考Dynamic array
另外numpy数组单个元素随机访问比list慢没啥大不了的,后者是python实现内建,前者还有ffi的开销。numpy快的地方在于可以整向量/整矩阵地做算术运算,中间省了许多开销。你写个list comprehension来用list模拟向量算术,再来跟numpy比,会有质的不同。哪怕没链MKL优化的numpy也能把list爆出翔。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询