Numpy 简介
导入numpy
Numpy是Python的一个很重要的第三方库,很多其他科学计算的第三方库都是以Numpy为基础建立的。
Numpy的一个重要特性是它的数组计算。
在使用Numpy之前,我们需要导入numpy
包:
In [1]:
- from numpy import *
使用前一定要先导入 Numpy 包,导入的方法有以下几种:
- import numpy
- import numpy as np
- from numpy import *
- from numpy import array, sin
事实上,在ipython中可以使用magic命令来快速导入Numpy的内容。
In [2]:
- %pylab
- Using matplotlib backend: Qt4Agg
- Populating the interactive namespace from numpy and matplotlib
数组上的数学操作
假如我们想将列表中的每个元素增加1
,但列表不支持这样的操作(报错):
In [3]:
- a = [1, 2, 3, 4]
- a + 1
- ---------------------------------------------------------------------------
- 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]:
- a = array(a)
- a
Out[4]:
- array([1, 2, 3, 4])
array
数组支持每个元素加 1
这样的操作:
In [5]:
- a + 1
Out[5]:
- array([2, 3, 4, 5])
与另一个 array
相加,得到对应元素相加的结果:
In [6]:
- b = array([2, 3, 4, 5])
- a + b
Out[6]:
- array([3, 5, 7, 9])
对应元素相乘:
In [7]:
- a * b
Out[7]:
- array([ 2, 6, 12, 20])
对应元素乘方:
In [8]:
- a ** b
Out[8]:
- array([ 1, 8, 81, 1024])
提取数组中的元素
提取第一个元素:
In [9]:
- a[0]
Out[9]:
- 1
提取前两个元素:
In [10]:
- a[:2]
Out[10]:
- array([1, 2])
最后两个元素:
In [11]:
- a[-2:]
Out[11]:
- array([3, 4])
将它们相加:
In [12]:
- a[:2] + a[-2:]
Out[12]:
- array([4, 6])
修改数组形状
查看 array
的形状:
In [13]:
- a.shape
Out[13]:
- (4L,)
修改 array
的形状:
In [14]:
- a.shape = 2,2
- a
Out[14]:
- array([[1, 2],
- [3, 4]])
多维数组
a
现在变成了一个二维的数组,可以进行加法:
In [15]:
- a + a
Out[15]:
- array([[2, 4],
- [6, 8]])
乘法仍然是对应元素的乘积,并不是按照矩阵乘法来计算:
In [16]:
- a * a
Out[16]:
- array([[ 1, 4],
- [ 9, 16]])
画图
linspace 用来生成一组等间隔的数据:
In [17]:
- a = linspace(0, 2*pi, 21)
- %precision 3
- a
Out[17]:
- 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]:
- b = sin(a)
- b
Out[18]:
- 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]:
- %matplotlib inline
- plot(a, b)
Out[19]:
- [<matplotlib.lines.Line2D at 0xa128ba8>]
从数组中选择元素
假设我们想选取数组b中所有非负的部分,首先可以利用 b
产生一组布尔值:
In [20]:
- b >= 0
Out[20]:
- 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]:
- mask = b >= 0
画出所有对应的非负值对应的点:
In [22]:
- plot(a[mask], b[mask], 'ro')
Out[22]:
- [<matplotlib.lines.Line2D at 0xa177be0>]