numpy是python中矩阵运算的模块。
1.numpy.genfromtxt()可以打开一个文件,并存储为ndarray的类型,delimiter参数指明分隔符,dtype参数指明该以什么类型存储。help()函数可以查python的函数具体信息。
5.numpy的布尔向量的逻辑运算。
6.函数astype()可以转换矩阵中的元素类型;sum函数对矩阵元素求和,当axis = 0时对列求和,当axis = 1时对行求和。
7.矩阵的加减乘除。
a+b的结果是a和b的对应元素相加,a+1是a的每个元素加1。
a**2是a的每个元素取平方,np.sin(a)是对a每个元素取正弦函数。
a*b是a,b中对应元素相乘,a.dot(b)(或者np.dot(a,b))是矩阵相乘。
8.矩阵的初始化。
arange(x):生成一个向量,元素为从0到x-1
arange(start, end, step), 生成一个向量,第一个元素是start,每个元素是前一个元素加上step,最后一个元素是小于end的最大值(不能等于end)
reshap((x,y)),生成形如x*y的矩阵。
linspace(start, end, n), 生成一个向量,要求向量中有n个元素,第一个元素为start,最后一个元素为end。
zeros((x,y)) 生成一个形如x*y的0矩阵。
ones((x, y))生成一个形如x*y的元素为1的矩阵。
np.random.random((x, y))生成一个x*y的矩阵,每个元素都是0到1之间的随机数。
(左图为代码,右图为运行结果)
9.取整函数,矩阵与向量的变换。
np.around(a),四舍五入取整
np.floor(a), 向下取整
np.ceil(a), 向上取整
b = a.reshape((x, y)), 将向量a变成x*y的矩阵
a = b.ravel(), 将矩阵b拉成向量。
c = b.T, 矩阵c是矩阵b的转置。
(左图为代码,右图为运行结果)
10.矩阵的拼接
np.hstack((a, b)): 水平拼接
np.vstack((a, b)): 竖直拼接
np.hsplit(a, (x1, x2, x3......)): 对矩阵a进行水平分割,(x1, x2, x3......)是切口,xi表示将x(i-1)于xi列之间分割开
np.vsplit(a, (x1, x2, x3......)): 对矩阵a进行垂直分割,(x1, x2, x3......)是切口,xi表示将x(i-1)于xi行之间分割开
(左图为代码,右图为运行结果)
11.矩阵排序
b = np.sort(a, axis = 0):对矩阵a的每一列进行从小到大排序,然后组合成新矩阵b
b = np.sort(a, axis = 1):对矩阵a的每一行进行从小到大排序,然后组合成新矩阵b
index = np.argsort(a): 按照元素从小到大的顺序依次返回a中对应元素的索引。
1 import numpy as np 2 3 a = np.around(10*np.random.random((3, 3))) 4 print(a) 5 b = np.sort(a, axis=0) 6 print(b) 7 c = np.sort(a, axis=1) 8 print(c)
运行结果如下
12. argmax函数
b = np.argmax(a, axis = 0)返回的是一个列表,b[i]是矩阵a的第i列向量的最大元素所在的行的索引
b = np.argmax(a, axis = 0)返回的是一个列表,b[i]是矩阵a的第i行向量的最大元素所在的列的索引
1 import numpy as np 2 3 a = np.around(10*np.random.random((3, 3))) 4 print(a) 5 b = np.argmax(a, axis=0) 6 print(b) 7 print(a[b, range(a.shape[1])]) 8 c = np.argmax(a, axis=1) 9 print(c) 10 print(a[range(a.shape[0]), c])
运行结果如下
13. tile函数
np.tile(a, (x, y))将矩阵或向量a在水平方向扩展x倍,在竖直方向扩展y倍,最后是一个二维矩阵。
1 import numpy as np 2 3 a = np.array([1,2,3]) 4 b = np.tile(a, (2, 3)) 5 c = np.array([[1,2], 6 [3,4]]) 7 d = np.tile(c, (2,3)) 8 print(b) 9 print(d)
运行结果如下
13.random.norml()和random.multvariate_normal
看下面的代码
1 import seaborn as sns 2 import numpy as np 3 import matplotlib as mpl 4 import matplotlib.pyplot as plt 5 6 7 x = np.random.normal(loc=5, scale=0.4, size=(5, 5) ) 8 print(x) 9 y = np.random.multivariate_normal(mean=[1, 1], cov=[[1, 0.5], [0.5, 1]], size=(2, 2)) 10 print(y)
第七行,np.random.normal(loc, scale, size)返回一个矩阵(也可以大于二维,说张量更好),该矩阵的形状由size给定,该矩阵的所有元素是正态分布的样本,该正太分布的期望是参数loc, 方差是参数scale。
第九行,np.random.multivariate_normal(mean, cov, size)返回一个矩阵(也可以大于二维,说张量更好),该矩阵的形状由size给定,该矩阵的所有元素是多维正态分布的样本,该正太分布的均值向量是参数loc, 协方差矩阵是参数scale。
运行结果如下