NumPy学习手记

May 2, 2017

Python原生提供多种数据类型的支持,包括列表、元组、字典、集合等。不过对于数据统计、数据挖掘、机器学习来说,这些支持不够用,而NumPy则是数学运算库的不二之选。

一、安装或升级

没有pip的请先安装Python包管理工具。

安装NumPy:

1
$ pip install numpy

升级NumPy:

1
$ pip install --upgrade numpy

二、导入NumPy

请自行在文件头导入NumPy库。如没有特殊情况,后文将省略这段代码。

导入numpy所有模块,请注意不要和其他库冲突

1
from numpy import *

三、功能使用

3.1 mat() 数组转矩阵

使用random函数随机生成 4x4 的数组,然后mat()把数组转换为矩阵。为了方便学习,接下来的几个例子都用这里生成的变量randMat。

1
2
3
4
5
6
>>> randMat = mat(random.rand(4,4))
>>> print randMat
[[ 0.63795383  0.16175714  0.47359276  0.97462684]
 [ 0.45715522  0.77251449  0.66504488  0.07133683]
 [ 0.61471841  0.23323568  0.95002458  0.38985276]
 [ 0.26085195  0.42547952  0.84814459  0.35398749]]

3.2 shape() 查看维度

使用上个例子的randMat变量,查看这个数组的维度。

1
2
>>> print shape(randMat)
(4, 4)

矩阵行

1
2
>>> print shape(randMat)[0]
4

矩阵列

1
2
>>> print shape(randMat)[1]
4

3.3 size 元素个数

总共16个元素

1
2
>>> print randMat.size
16

3.4 逆矩阵

注意变量后面的参数

1
2
3
4
5
>>> print randMat.I
[[ 0.29673207  1.05925085  1.8179092  -3.03254655]
 [ 0.36225232  1.41847049 -1.66390977  0.54925607]
 [-0.74644908 -0.81502459  0.82412699  1.31180452]
 [ 1.13439787 -0.53272813 -1.31423984  1.25639622]]

3.5 tile() 函数

定义一个比较简单的1x2矩阵

1
>>> a = [1, 2]

输入矩阵和参数值

1
2
3
4
5
>>> print tile(a, 2)
[1 2 1 2]

>>> print tile(a, 4)
[1 2 1 2 1 2 1 2]

把参数改为元组(1,2),变成1x4的矩阵

1
2
>>> print tile(a, (1,2))
[[1 2 1 2]]

参数改为(2, 2),变成2x4的矩阵,行和列都是原来的2倍

1
2
3
>>> print tile(a, (2,2))
[[1 2 1 2]
 [1 2 1 2]]

把a在行上拓展

1
2
3
4
5
>>> print tile(a, (4,1))
[[1 2]
 [1 2]
 [1 2]
 [1 2]]

3.6 sum() 总计

按列总计

1
2
>>> print sum([[0,1,2],[2,1,3]],axis=0)
[2 2 5]

按行总计

1
2
>>> print sum([[0,1,2],[2,1,3]],axis=1)
[3 6]

3.7 argsort()

返回按升序排列的下标值

1
2
3
>>> x = array([1, 2, 3])
>>> argsort(x)
array([0, 1, 2])
1
2
3
>>> x = array([3, 2, 1])
>>> argsort(x)
array([2, 1, 0])
1
2
3
>>> x = array([3, 1, 2])
>>> argsort(x)
array([1, 2, 0])

多维矩阵的排序,使用axis参数指定排序的条件

1
2
3
4
>>> x = array([[0, 3], [2, 2]])
>>> argsort(x, axis=0)
array([[0, 1],
       [1, 0]])
1
2
3
>>> argsort(x, axis=1)
array([[0, 1],
       [0, 1]])

按降序排列

1
2
3
>>> x = array([1,2,3])
>>> argsort(-x)
array([2, 1, 0])

3.8 创建0矩阵

1x4浮点型0矩阵:

1
2
>>> print zeros(4)
[0. 0. 0. 0.]

创建一个4x4的浮点型0矩阵:

1
2
3
4
5
>>> print zeros([4,4])
[[ 0.  0.  0.  0.]
 [ 0.  0.  0.  0.]
 [ 0.  0.  0.  0.]
 [ 0.  0.  0.  0.]]

zeros()里面,注意填写的[4,4],分别是行和列。


整形的0矩阵:

1
2
3
4
5
>>> print zeros([4,4],int16)
[[0 0 0 0]
 [0 0 0 0]
 [0 0 0 0]
 [0 0 0 0]]

3.9 全1矩阵

2x3的全1矩阵

1
2
3
>>> print ones([2,3])
[[ 1.  1.  1.]
 [ 1.  1.  1.]]

生成两个2x3全1矩阵

1
2
3
4
5
6
>>> print ones([2,2,3])
[[[ 1.  1.  1.]
  [ 1.  1.  1.]]

 [[ 1.  1.  1.]
  [ 1.  1.  1.]]]

生成两个整形2x3全1矩阵

1
2
3
4
5
6
>>> print ones([2,2,3],int16)
[[[1 1 1]
  [1 1 1]]

 [[1 1 1]
  [1 1 1]]]