NumPy是Python数值计算最重要的基础包,提供了以下功能(不限于此)
快速高效的多(duo)维数组对象ndarray。
用于对数组执行元素级计算以及直接对数组执行数学(xue)运算的函数。
用于读写硬盘上基于数组的数据集的工具。
线性代数运算、傅里叶变换,以及随机数生成。
成熟的C API, 用于Python插件和原生C、C++、Fortran代码访问 NumPy的数据结构和计算工具。
NumPy之于数值计算特别重要的原因之一,是因为它可以高效处理大数组的数据。这是因为:
NumPy是在一个连续的内存块中存储数据,独立于其他Python内置对象。NumPy的C语言编写的算法库可以操作内存,而不必进行类型检查或其它前期工作。比起Python的内置序列,NumPy数组使用的内存更少。
NumPy可以在整个数组上执行复杂的计算,而不需要Python的for循环。
1.1 NumPy引入方式
NumPy使用的内存更小,运算效率也更高,我们来比较一下NumPy和Python自带的列表的性能:

NumPy比Python自带的列表快了一个数量级。
1.2ndarrary:多(duo)维数组对象
多(duo)维数组对象ndarray是一个快速而灵活的数据集容器。我们可以利用这种数组对整块数据执行一些数学(xue)运算,其语法跟标量元素之间的运算一样。
**ndarray是一个通用的同构数据多(duo)维容器,也就是说,其中的所有元素必须是相同类型的。**每个数组都有一个shape(一个表示各维度大小的元组)和一个dtype(一个用于说明数组数据类型的对象):

1.2.1 创建ndarray
创建数组最简单的办法就是使用array函数。它接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的NumPy数组。

np.array会尝试为新建的这个数组推断出一个较为合适的数据类型。
嵌套序列(比如由一组等长列表组成的列表)将会被转换为一个多(duo)维数组:
另一个类似的函数是asarray。array和asarray都可以将输入的参数转化为ndarray对象,他们的区别在于当参数为一般的序列时,两个函数结果相同;当参数本身就是ndarray类型时,array会新建一个ndarray对象,作为参数的副本,但是asarray不会新建,而是在原地操作,与参数共享同一块内存。

一些函数也可以新建特定的数组:zeros可以创建指定长度或形状的全0数组,ones可以创建指定长度或形状的全1数组,empty可以创建一个没有任何具体值的数值。对于这些函数,输入参数为一维数组的长度,或者一个表示形状的元组:
注意:np.empty不需要初始化数组,因此速度比较快。在很多情况下,它返回的都是一些未初始化的垃圾值。
类似range函数,我们也可以利用NumPy中的arange函数生成一组数据。
1.2.1 ndarray的数据类型
ndarray的数据类型dtype可以认为是一个特殊的对象,当我们需要将一块内存解读为特定的数据类型时,需要用到dtype中指明的信息。
由于NumPy主要处理数值计算,因此没有特别指定的时候,数据类型都是float64(浮点数)。
我们可以用ndarray的astype将一个数组从一个dtype转换成另一个dtype:
将浮点数转换成整数,则小数部分将会被截取删除: