# Numpy 简介 ## 导入numpy **Numpy**是**Python**的一个很重要的第三方库,很多其他科学计算的第三方库都是以**Numpy**为基础建立的。 **Numpy**的一个重要特性是它的数组计算。 在使用**Numpy**之前,我们需要导入`numpy`包: In [1]: ```py from numpy import * ``` 使用前一定要先导入 Numpy 包,导入的方法有以下几种: ```py import numpy import numpy as np from numpy import * from numpy import array, sin ``` 事实上,在**ipython**中可以使用magic命令来快速导入**Numpy**的内容。 In [2]: ```py %pylab ``` ```py Using matplotlib backend: Qt4Agg Populating the interactive namespace from numpy and matplotlib ``` ## 数组上的数学操作 假如我们想将列表中的每个元素增加`1`,但列表不支持这样的操作(报错): In [3]: ```py a = [1, 2, 3, 4] a + 1 ``` ```py --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-3-068856d2a224> in <module>() 1 a = [1, 2, 3, 4] ----> 2 a + 1 TypeError: can only concatenate list (not "int") to list ``` 转成 `array` : In [4]: ```py a = array(a) a ``` Out[4]: ```py array([1, 2, 3, 4]) ``` `array` 数组支持每个元素加 `1` 这样的操作: In [5]: ```py a + 1 ``` Out[5]: ```py array([2, 3, 4, 5]) ``` 与另一个 `array` 相加,得到对应元素相加的结果: In [6]: ```py b = array([2, 3, 4, 5]) a + b ``` Out[6]: ```py array([3, 5, 7, 9]) ``` 对应元素相乘: In [7]: ```py a * b ``` Out[7]: ```py array([ 2, 6, 12, 20]) ``` 对应元素乘方: In [8]: ```py a ** b ``` Out[8]: ```py array([ 1, 8, 81, 1024]) ``` ## 提取数组中的元素 提取第一个元素: In [9]: ```py a[0] ``` Out[9]: ```py 1 ``` 提取前两个元素: In [10]: ```py a[:2] ``` Out[10]: ```py array([1, 2]) ``` 最后两个元素: In [11]: ```py a[-2:] ``` Out[11]: ```py array([3, 4]) ``` 将它们相加: In [12]: ```py a[:2] + a[-2:] ``` Out[12]: ```py array([4, 6]) ``` ## 修改数组形状 查看 `array` 的形状: In [13]: ```py a.shape ``` Out[13]: ```py (4L,) ``` 修改 `array` 的形状: In [14]: ```py a.shape = 2,2 a ``` Out[14]: ```py array([[1, 2], [3, 4]]) ``` ## 多维数组 `a` 现在变成了一个二维的数组,可以进行加法: In [15]: ```py a + a ``` Out[15]: ```py array([[2, 4], [6, 8]]) ``` 乘法仍然是对应元素的乘积,并不是按照矩阵乘法来计算: In [16]: ```py a * a ``` Out[16]: ```py array([[ 1, 4], [ 9, 16]]) ``` ## 画图 linspace 用来生成一组等间隔的数据: In [17]: ```py a = linspace(0, 2*pi, 21) %precision 3 a ``` Out[17]: ```py array([ 0\. , 0.314, 0.628, 0.942, 1.257, 1.571, 1.885, 2.199, 2.513, 2.827, 3.142, 3.456, 3.77 , 4.084, 4.398, 4.712, 5.027, 5.341, 5.655, 5.969, 6.283]) ``` 三角函数: In [18]: ```py b = sin(a) b ``` Out[18]: ```py array([ 0.000e+00, 3.090e-01, 5.878e-01, 8.090e-01, 9.511e-01, 1.000e+00, 9.511e-01, 8.090e-01, 5.878e-01, 3.090e-01, 1.225e-16, -3.090e-01, -5.878e-01, -8.090e-01, -9.511e-01, -1.000e+00, -9.511e-01, -8.090e-01, -5.878e-01, -3.090e-01, -2.449e-16]) ``` 画出图像: In [19]: ```py %matplotlib inline plot(a, b) ``` Out[19]: ```py [<matplotlib.lines.Line2D at 0xa128ba8>] ```  ## 从数组中选择元素 假设我们想选取数组b中所有非负的部分,首先可以利用 `b` 产生一组布尔值: In [20]: ```py b >= 0 ``` Out[20]: ```py array([ True, True, True, True, True, True, True, True, True, True, True, False, False, False, False, False, False, False, False, False, False], dtype=bool) ``` In [21]: ```py mask = b >= 0 ``` 画出所有对应的非负值对应的点: In [22]: ```py plot(a[mask], b[mask], 'ro') ``` Out[22]: ```py [<matplotlib.lines.Line2D at 0xa177be0>] ``` 