# 7.1 NumPy概述

NumPy是Python中科学计算最基础的库。多维数组对象是NumPy中的基础数据类型，由多维数组对象派生出掩码数组和矩阵。此外，NumPy在这些数组上定义了各种运算,例如形状改变、数组排序、离散傅里叶变换,随机模拟等。这些运算快速高效，极大地提高了Python科学计算的效率。虽然Python标准库中提供了数组(array)类型，可以通过import array来使用，然而由于其只支持一维数组及运算效率低等缺点，并没有得到广泛应用。

NumPy包的核心是ndarray对象，也称为NumPy数组。NumPy数组和标准Python序列之间有几个重要的区别：

1. NumPy数组一旦创建，固定大小：Python中的列表数据对象类型支持动态增长。若要对一个NumPy数组大小进行改变，则会创建一个新的数组来代替原数组，同时删除原数组。
2. NumPy数组中的元素类型必须相同。
3. NumPy数组可以对大量数据进行科学计算以及一些操作
4. **NumPy数组便于对大量数据进行高等数学以及其他类型的操作**。与使用Python的内置序列对象类型相比，定义在NumPy数组上的操作执行起来效率更高。同时，NumPy也大大降低了编程的难度，使用NumPy库进行开发所需要编写代码往往更少。

主流的python的数据科学软件包均采用NumPy数组，且越来越多的软件包也逐渐加入了NumPy数组;虽然数据科学软件包支持python序列输入，但它们在处理数据序列数据前有一个共同特点：将这些序列对象转换为NumPy数组对象后在对数据进行处理，且常以NumPy数组的形式对这些数据进行输出。可以毫不夸张地说，如果只懂得Python的内置对象类型，而不懂得操纵NumPy数组，就无法有效地使用Python语言完成数据科学任务！

在数据科学中，计算速度快慢经常关系着科学研究或工程项目的成败。因为Python是一种解释语言，在代码运行过程中，解释器对Python代码进行逐行解释，而不需要像C语言一样进行编译，所以Python代码运行速度相较C语言等慢。这也就造成了，对Python内置对象类型进行逐元素操作（如逐元素赋值），是十分花费时间的。而NumPy却巧妙的克服了对Python内置对象类型进行操作的效率问题，通过使用C语言预编译的大量NumPy数组操作，使数组对象操作更加迅速。

NumPy完全支持面向对象的方法，再次从ndarray开始。例如，ndarray是一个类，拥有许多方法和属性。它的许多方法都将函数映射到最外层的NumPy名称空间中，使程序员可以完全自由地按照自己喜欢的范式编写代码，并且/或者按照手边的任务最合适的范式编写代码。

NumPy为我们提供了两种方法的最佳效果:当涉及ndarray时，元素对元素的操作是“默认模式”，但是元素对元素的操作由预编译的C代码快速执行。

### 7.1.2 安装NumPy

我们可以使用Conda命令或者pip命令对NumPy安装：

conda install numpy

pip instal numpy

NumPy安装完毕后，就可以导入使用了，通常我们使用np作为NumPy的别名

import numpy as np
