Python-NumPy-Usage

NumPy基本使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> a.shape
(10,)
>>> a.dtype
dtype('int64')
>>> a[5]
5
>>> a[3:5]
array([3, 4])
>>> a[:5]
array([0, 1, 2, 3, 4])
>>> a[:-1]
array([0, 1, 2, 3, 4, 5, 6, 7, 8])
>>> a[1::2]
array([1, 3, 5, 7, 9])
>>> a[5:0:-2] # 步长为负,开始下标 > 结束下标
array([5, 3, 1])
>>> a[::2]
array([0, 2, 4, 6, 8])
>>> a[::-2]
array([9, 7, 5, 3, 1])
>>> a[2:4] = 100, 101
>>> a
array([ 0, 1, 100, 101, 4, 5, 6, 7, 8, 9])

与Python列表不同,NumPy通过下标产生的数组,与原数组共享数据空间

1
2
3
4
5
6
7
8
9
10
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b = a[:5]
>>> b
array([0, 1, 2, 3, 4])
>>> b[0] = 100
>>> b
array([100, 1, 2, 3, 4])
>>> a
array([100, 1, 2, 3, 4, 5, 6, 7, 8, 9])

NumPy的matrix类

  • 多维数组的运算,NumPy缺省情况下不使用矩阵运算
  • 使用NumPy的matrix类创建的是矩阵对象,加减乘除运算缺省采用矩阵方式计算。
  • 由于NumPy中同时存在ndarray和matrix对象,容易弄混,有违Python显式优于隐式的原则,因此并不推荐在较复杂的程序中使用matrix。

需要将一维数组当做行向量或列向量进行矩阵运算时,推荐先使用reshape函数将一维数组转换为二维数组

1
2
3
4
5
6
7
8
9
>>> a = np.array([1, 2, 3])
>>> a
array([1, 2, 3])
>>> a.reshape((-1, 1))
array([[1],
[2],
[3]])
>>> a.reshape((1, -1))
array([[1, 2, 3]])

np.dot()

  • 对于一维数组:内积(两数组元素对应下标元素的乘积和)
  • 对于二维数组:两数组的矩阵乘积
  • 对于多维数组:dot(a, b)[i, j, k, m] = sum(a[i, j, :] * b[k, :, m]),即结果数组中的每个元素都是数组a的最后一维上的所有元素与数组b的倒数第二位上的所有元素的乘积和。

np.inner()

  • 对于一维数组:内积(两数组元素对应下标元素的乘积和)
  • 对于多维数组:inner(a, b)[i, j, k, m] = sum(a[i, j, :] * b[k, :, m]),即结果数组中的每个元素都是数组a的最后一维上的所有元素与数组b的倒数第二位上的所有元素的乘积和。

np.outer()

只按照一维数组进行计算,若传入多维数组,则将此多维数组展平为一维数组之后进行计算。

线性代数子库linalg

  • inv()函数计算逆矩阵
  • solve()函数求解多元一次方程组。solve()函数有两个参数a和b。a是一个NxN的二维数组,b是长度为N的一维数组,solve函数找到一个长度为N的一维数组x,使得a和x的矩阵乘积等于b,数组x就是多元一次方程组的解。

其他Python模块

SciPy

包括 统计、优化、整合线代模块、傅里叶变换、信号和图像处理、常微分方程求解器等。

NLTK

NLP中常用

Scikit-Learn

基本功能

分类,回归,聚类,数据降维,模型选择,数据预处理

Scikit-learn requires:

  • Python (>= 2.7 or >= 3.3),
  • NumPy (>= 1.8.2),
  • SciPy (>= 0.13.3).
窝很可爱,请给窝钱