Numpy 简介

导入numpy

NumpyPython的一个很重要的第三方库,很多其他科学计算的第三方库都是以Numpy为基础建立的。

Numpy的一个重要特性是它的数组计算。

在使用Numpy之前,我们需要导入numpy包:

In [1]:

  1. from numpy import *

使用前一定要先导入 Numpy 包,导入的方法有以下几种:

  1. import numpy
  2. import numpy as np
  3. from numpy import *
  4. from numpy import array, sin

事实上,在ipython中可以使用magic命令来快速导入Numpy的内容。

In [2]:

  1. %pylab
  1. Using matplotlib backend: Qt4Agg
  2. Populating the interactive namespace from numpy and matplotlib

数组上的数学操作

假如我们想将列表中的每个元素增加1,但列表不支持这样的操作(报错):

In [3]:

  1. a = [1, 2, 3, 4]
  2. a + 1
  1. ---------------------------------------------------------------------------
  2. TypeError Traceback (most recent call last)
  3. <ipython-input-3-068856d2a224> in <module>()
  4. 1 a = [1, 2, 3, 4]
  5. ----> 2 a + 1
  6.  
  7. TypeError: can only concatenate list (not "int") to list

转成 array

In [4]:

  1. a = array(a)
  2. a

Out[4]:

  1. array([1, 2, 3, 4])

array 数组支持每个元素加 1 这样的操作:

In [5]:

  1. a + 1

Out[5]:

  1. array([2, 3, 4, 5])

与另一个 array 相加,得到对应元素相加的结果:

In [6]:

  1. b = array([2, 3, 4, 5])
  2. a + b

Out[6]:

  1. array([3, 5, 7, 9])

对应元素相乘:

In [7]:

  1. a * b

Out[7]:

  1. array([ 2, 6, 12, 20])

对应元素乘方:

In [8]:

  1. a ** b

Out[8]:

  1. array([ 1, 8, 81, 1024])

提取数组中的元素

提取第一个元素:

In [9]:

  1. a[0]

Out[9]:

  1. 1

提取前两个元素:

In [10]:

  1. a[:2]

Out[10]:

  1. array([1, 2])

最后两个元素:

In [11]:

  1. a[-2:]

Out[11]:

  1. array([3, 4])

将它们相加:

In [12]:

  1. a[:2] + a[-2:]

Out[12]:

  1. array([4, 6])

修改数组形状

查看 array 的形状:

In [13]:

  1. a.shape

Out[13]:

  1. (4L,)

修改 array 的形状:

In [14]:

  1. a.shape = 2,2
  2. a

Out[14]:

  1. array([[1, 2],
  2. [3, 4]])

多维数组

a 现在变成了一个二维的数组,可以进行加法:

In [15]:

  1. a + a

Out[15]:

  1. array([[2, 4],
  2. [6, 8]])

乘法仍然是对应元素的乘积,并不是按照矩阵乘法来计算:

In [16]:

  1. a * a

Out[16]:

  1. array([[ 1, 4],
  2. [ 9, 16]])

画图

linspace 用来生成一组等间隔的数据:

In [17]:

  1. a = linspace(0, 2*pi, 21)
  2. %precision 3
  3. a

Out[17]:

  1. array([ 0. , 0.314, 0.628, 0.942, 1.257, 1.571, 1.885, 2.199,
  2. 2.513, 2.827, 3.142, 3.456, 3.77 , 4.084, 4.398, 4.712,
  3. 5.027, 5.341, 5.655, 5.969, 6.283])

三角函数:

In [18]:

  1. b = sin(a)
  2. b

Out[18]:

  1. array([ 0.000e+00, 3.090e-01, 5.878e-01, 8.090e-01, 9.511e-01,
  2. 1.000e+00, 9.511e-01, 8.090e-01, 5.878e-01, 3.090e-01,
  3. 1.225e-16, -3.090e-01, -5.878e-01, -8.090e-01, -9.511e-01,
  4. -1.000e+00, -9.511e-01, -8.090e-01, -5.878e-01, -3.090e-01,
  5. -2.449e-16])

画出图像:

In [19]:

  1. %matplotlib inline
  2. plot(a, b)

Out[19]:

  1. [<matplotlib.lines.Line2D at 0xa128ba8>]

03.01 Numpy 简介 - 图1

从数组中选择元素

假设我们想选取数组b中所有非负的部分,首先可以利用 b 产生一组布尔值:

In [20]:

  1. b >= 0

Out[20]:

  1. array([ True, True, True, True, True, True, True, True, True,
  2. True, True, False, False, False, False, False, False, False,
  3. False, False, False], dtype=bool)

In [21]:

  1. mask = b >= 0

画出所有对应的非负值对应的点:

In [22]:

  1. plot(a[mask], b[mask], 'ro')

Out[22]:

  1. [<matplotlib.lines.Line2D at 0xa177be0>]

03.01 Numpy 简介 - 图2

原文: https://nbviewer.jupyter.org/github/lijin-THU/notes-python/blob/master/03-numpy/03.01-numpy-overview.ipynb