作者:矢量场
链接:https://www.zhihu.com/question/30823702/answer/318265889
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
有几个原因。1,底层是C,部分是Fortran(也挺快的,你们千万不要瞧不起fortran,快是真快。)。这些代码一来快,二来已经运行几十年了,错误的概率不高。其实一个看似很简单的问题,比如e^x用泰勒展开去计算,展到多少项也是有技巧的。最简单的方法就是n-1和n相除看大小变化规律。但我要告诉你这不是完美的算法。这里头有一个大坑。因为float的原因一些个别数据,一般是一些stop points,会被计算出很诡异的结果,如果你自己写的话。但是numpy不会有。一些比较小的package会出现这种情况。比如说,上次曾经用一个nlp的package算出tf大于1的。这种多半都是float的问题。2,除了用C以外,numpy有自己的一个指令集合。可以提升运行速度。这个知道的人不多。3,在R里有一个东西叫向量化编程。速度是直接用内嵌数据结构的100倍左右。原理类似。
能习惯用numpy还是尽量用。真正的好东西。写python能用库还是用库。但是,这里头当然还有其他的问题。比如你下载一些库下载地址不对可能下了野库,里头是带病毒的。所以Linux,是个好东西,尤其是假如是公司或者学校的Linux(逃)。嗯其他的,说起来就复杂了。annaconda是个好东西。
numpy如果有缺点的话,就是这东西缺少一个类似openCV那样十分简洁的工作手册。openCV的手册极其良心。有高中时代的那种,五块钱一本的全是公式的数学物理小书的感觉。实在是太好了,我每次用numpy很少查stackoverflow或者github。pandas有一本书叫利用python做数据分析。这本书也非常好。就是pandas的作者所写。当然numpy功能强大很多。numpy的官方文档实在是太多了(细节很好,但是不容易让你有一个好的big-picture)。不过遇到不会的去search是很好的。