Numpy
Python中的矩阵板块用于对于矩阵的一系计算。
1.数组
numpy中用函数array创造数组
import numpy as np
A=np.array([1,3,2])#创造一维数组
B=np.arry([[1,3,2],[1,9,8]])#创造二维数组
除此之外还有:
np.arange(0,4,dtypr=float)#创造浮点型数组,float可以替换为int,变成整数型数组。
np.empty((m,n),int)#创造一个m*n的空矩阵(每次运行结果都不一样)
np.random,randint(0,3,(2,3))#生成[0,3]上的两行3列的随机整数数组
np.linspace(m,n,num=x)#在给定区间内创造间隔相等的数组,从m到n的数组,包含x个元素。
1.2除了创造数组我们有时还要对数组属性进行测量
import numpy as np
a=array([[2,5,9],[32,6,7]])
print(a.shape)#返回一个元祖,对于m行n列的矩阵返回元祖(m,n)
print(a.dtype)#返回一个数据类型
print(a.size)#返回一个整数,为数组中元素得整数
数组元素得索引
array中的元素都必须是同一种数据类型,array数组元素得引用方式为a[m,n]。但因为索引是从0开始的,所以实际看到的要加一才是真正的那一行。
import numpy as np
a=np.array([[2,6,9],[3,6,9],[4,6,7]])
print(a[m,n])#输出第m+1行n+1列的元素
print(a[:,n])#输出第n+1列的元素
print(a[[0,1],0:2])#输出第一行,第二行,第0,1两列的元素
对数组进行某行某列的删除
import numpy as np
a=array([[1,3,4],[2,3,4],[7,8,9]])
b=np.delete(a,n,axis=0)#删除第n+1行,axis=0按行,axis=1按列
d=np.append(a,[2,3,4],axis=0)#增加一行
1.5对数组的变形,分割以及整合
对数组操作时通常使用reshape函数和resize函数进行变形
import numpy as np
a=np.arange(4)
b=a.reshape(2,2)#生成数据组[[0,1],[2,3]]#构造2行2列的数组
c=np.arange(4,8).reshape(2,2)#生成数组[[4,5],[6,7]]
reshape函数和resize函数使用方式相同但是reshape不改变数组本身,而resize直接通过改变数组本身来改变形状的。
import numpy as np
a=np.arange(4)
b=a.reshape(2,2)#生成数据组[[0,1],[2,3]]
c=np.arange(4,8).reshape(2,2)#生成数组[[4,5],[6,7]]
c2=np.r_[a,c] #垂直方向整合
di=np.c_[a,c] #水平方向整合
除了上述函数外,vatack和hstack分别是垂直和水平方向的整合。
数组中分割的函数分别为hsplit和vsplit这两个函数
import numpy as np
a=np.arange(4).reshape(2,2)
b=np.hsplit(a,2)#把a平分为两个列数组
d=np.vsplit(a,2)#把a评分为两个行数组
2数组的运算
2.1数组的加法和乘法,数组对应大小要相等
#a,b为两个大小相等的数组
c=a+b
c=a*b#也就是对应元素相加和相乘
e=np.modf(a/b)[0]#对应元素相处的小数部分
e=np.modf(a/b)[1]#对应元素相处整数部分
这里用到了modf这个函数。
注意:numpy中的+,-,*,/,**都是对应逐个元素进行的。
同时在数组对应大小相等的情况下,数组对应元素之间还能进行大小之间的比较。并且还能对其进行一些其他的操作。
import numpy as np
a=np.array([[3,4,9],[15,12,1]])
b=np.array([[2,6,3],[7,8,12]])
print(a[a>b])#取出a大于b的所有元素,输出:[3,9,12,15]
print(a[a>10])#取出a大于10的元素,输出:[12,15]
print(np.where(a>10,-1,a))
print(np.where(a>10,-1,0))
大小的比较和数字大小比较相同,都是>,<,<=
同时numpy也包含求和函数
import numpy as np
a=np.arange(1,4)
b=sum(a)#使用方法求矩阵的和
c=a.sum()#使用Python自带的方法逐列的求和
d=np.sum(a,axis=0)#使用numpy的方法逐列的求和
矩阵运算和线性代数的关系
Python中的线性代数运算主要是用numpy.linalg模块,其常用函数如表所示
函数 | 说明 |
inv | 求矩阵的逆矩阵 |
solve | 求解线性方程 |
det | 求矩阵的行列式 |
eig | 求矩阵的特征值 |
eigvals | 求矩阵的特征值和特征向量 |