为什么NumPy数组如此高效

Python049

为什么NumPy数组如此高效,第1张

NumPy是Python科学计算的基础包。它提供了多维数组对象、基于数组的各种派生对象(例如,masked Array, 矩阵)。除此之外,还提供了各种各样的加快数组操作的例程,包括数学基本计算、逻辑、图形操作、排序、选择、输入输出,离散傅立叶变换、基础线性代数、基础统计操作、随机仿真等等。NumPy的核心是ndarray对象。一方面,Ndarray对象封装了可以包含相同数据类型的多维数组;另一方面,为获得更好的性能, 在ndarray上的操作都是在编译过的代码上执行的。此外,和Python自身的序列对象相比,两者之间有如下不同:1. NumPy数组的大小是固定的。Python的List是可以动态增长的。改变NumPy的大小会重新创建一个新的数组并把原来的删掉。2. NumPy数组中的元素一定是同一类型的。(相应地,每个元素所占的内存大小也是一样的。)例外情况是:(不是特别理解:one can have arrays of (Python, including NumPy) objects, thereby allowing for arrays of different sized elements.)3. NumPy数组支持在大量数据上进行数学计算和其他类型的操作。通常情况下,与Python自带的序列类型相比,NumPy数组上的操作执行更高效,代码量也更少。4. 越来越多的Python科学计算包都是用到了NumPy的数组;虽然这些库支持Python序列类型的输入,但是内部操作还是要先将其转换为NumPy的数组类型,而且输出通常就是NumPy数组。所以,如果你想要高效地使用这些Python的科学计算包,仅仅知道Python内建的序列类型是不够的,你还需要知道如何使用NumPy数组。最后,NumPy完全支持面向对象的范式。例如,ndarray是一个类,它拥有许多方法和属性。它的许多方法都映射到了最外层的NumPy命名空间的函数里。这样一来,就可以给程序员更多的自由:程序员可以自由选者是面向对象的方式还是面向过程的方式使用这些接口。

(因为上次回复引起提者的反感修改如下)

1.python的确如楼上所说,更适合快速。但是如果一定要有效率也不是没有办法。通常会用C接口。比如象是海量数据处理,我经常用ctypes这个库,节约内存,同时也提高效率

2.python的库有些是C语言写的,也优化过,其实速度并不是想象的那么慢。也就比JAVA慢一点吧。我曾经对比过,同样的计算,优化过的python程序比C语言都要快10倍

3.python语言里整型也是对象。通常不会用它直接做大型数组。

python在科学计算里是很受欢迎的。方便 ,开发速度快,其实效率也还是很快的。曾经用python做过一个海量数据分析的分布式数据分析软件。 感觉还是很好的。 这套系统运行在一组只有2G-4G内存的老的服务器上。那些服务器的计算速度连我的奔腾CPU的笔记本都比不上。不过依然可以处理几千万的用户数据。