一.矩阵与矩阵库
1.矩阵
(1)创建矩阵:
np.matrix("<matrix_info>"):创建1个矩阵
#参数说明:
matrix_info:指定矩阵中的元素
格式:"a11,a12...a1n;a21,a22...a2n;...;am1,am2...amn"
注意:①aij是第i行第j列处的元素
②每行/每列的长度必须相等
③整体是1个str
④','用于分隔同1行的不同元素,';'用于分隔不同行
#实例:
>>> np.matrix("1,2;3,4")
matrix([[1, 2],
[3, 4]])
>>> np.matrix("3+1j,2-2j;0,4+1j")#注意:即使虚部(即j前的系数)为1,也不能省略
matrix([[3.+1.j, 2.-2.j],
[0.+0.j, 4.+1.j]])
(2)属性:
矩阵也可以使用ndarray对象的方法和属性,而下面2个属性不能用于ndarray对象
#########################################################################################
<mtr>.I:求逆矩阵
#参数说明:
mtr:指定矩阵
#实例:
>>> a=np.matrix("1,2;3,4")
>>> a.I
matrix([[-2. , 1. ],
[ 1.5, -0.5]])
#########################################################################################
<mtr>.H:求共轭转置矩阵
#即先将每个元素都变为其共轭复数,再进行转置
#对于实矩阵,和求转置相同
#实例:
>>> a=np.matrix("1,2;3,4")
>>> a.H
matrix([[1, 3],
[2, 4]])
>>> b=np.matrix("3+1j,2-2j;0,4+1j")
>>> b.H
matrix([[3.-1.j, 0.-0.j],
[2.+2.j, 4.-1.j]])
2.矩阵库(Matlib)
(1)简介:
NumPy中包含了1个矩阵库np.matlib,该模块中的方法返回矩阵(Matrix),而非Ndarray对象.矩阵里的元素可为数字/符号/数学式
注意:NumPy的__init__.py中没有引入matlib,因而需要通过import numpy.matlib来单独导入numpy.matlib
(2)方法:
np.matlib.empty(<shape>[,<dtype>,<order>]):返回未赋值的矩阵
#由于未赋值,元素均为随机数
#参数说明:
shape:指定新矩阵形状;整数/整数元组
格式:x;(x1,x2)依次指定列,行的长度
#由于是Matrix,一定是2维;shape为整数时,列长度自动设为1;shape中元素多于2时,取最后2个依次指定列,行的长度
dtype:数据类型;无需加"";默认为np.float64
order:"C"/"F"/"A"/"K"
#不传入dtype也可直接传入order而无需占位符;但如果均传入必须先传入dtype再传入order
#实例:
>>> a=np.matlib.empty(2)
>>> print(a)
[[0. 0.]]
>>> a=np.matlib.empty((2,2))
>>> print(a)
[[5.e-324 4.e-323]
[2.e-323 2.e-323]]
>>> type(a[0,0])
<class 'numpy.float64'>
>>> a=np.matlib.empty((2,2),np.int8)
>>> print(a)
[[1 1]
[1 1]]
>>> print(type(a[0,0]))
<class 'numpy.int8'>
[[0. 0. 0.]>>> a=np.matlib.empty((2,2),"F")
>>> print(a)
[[1.4e-45+0.j 1.1e-44+0.j]
[5.6e-45+0.j 5.6e-45+0.j]]
[0. 0. 0.]]
>>> a=np.matlib.empty((2,2),"F",np.float32)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\1234\AppData\Roaming\Python\Python37\site-packages\numpy\matlib.py", line 49, in empty
return ndarray.__new__(matrix, shape, dtype, order=order)
ValueError: Non-string object detected for the array ordering. Please pass in 'C', 'F', 'A', or 'K' instead
>>> a=np.matlib.empty((2,2),np.float32,"F")
>>> print(a)
[[-4.1328328e+33 -1.4827223e-31]
[-1.6491286e-18 -2.4292266e-30]]
##########################################################
np.matlib.zeros(<shape>[dtype,order]):返回零矩阵
#参数说明:同.empty()
#实例:
>>> a=np.matlib.zeros((2,3))
>>> print(a)
[[0. 0. 0.]
[0. 0. 0.]]
>>> a=np.matlib.zeros((2,3),"F")
>>> print(a)
[[0.+0.j 0.+0.j 0.+0.j]
[0.+0.j 0.+0.j 0.+0.j]]
>>> a=np.matlib.zeros((2,3),np.float16,"F")
>>> print(a)
[[0. 0. 0.]
[0. 0. 0.]]
##########################################################
np.matlib.ones(<shape>[dtype,order]):返回所有元素均为1的矩阵
#参数说明:同.empty()
#实例:
>>> a=np.matlib.ones((2,3),np.float16,"F")
>>> print(a)
[[1. 1. 1.]
[1. 1. 1.]]
>>> a=np.matlib.ones((2,3))
>>> print(a)
[[1. 1. 1.]
[1. 1. 1.]]
>>> type(a[0,0])
<class 'numpy.float64'>
##########################################################
a=np.matlib.eye(n=None[,M=n,k=0,dtype=float,order="C"]):返回对角线上为1,其余元素为0的矩阵
#即a[i,i](i=1,2...min{r,c})处为1,其余元素为0
#参数说明:其他同.empty()
n,M:指定矩阵行/列数;为int
#也可为位置参数
k:指定使用的对角线;为int(0表示主对角线,>0向上,<0向下)
#实例:
>>> a=np.matlib.eye(3)
>>> print(a)
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
>>> a=np.matlib.eye(3,2)
>>> print(a)#不一定是严格的主对角线
[[1. 0.]
[0. 1.]
[0. 0.]]
>>> np.matlib.eye(3,k=1)
matrix([[0., 1., 0.],
[0., 0., 1.],
[0., 0., 0.]])
##########################################################
np.matlib.identity(<n>[,dtype=np.float64]):返回单位矩阵
#参数说明:dtype同.empty()
n:单位矩阵的阶数
#实例:
>>> a=np.matlib.identity(3)
>>> print(a)
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
##########################################################
np.matlib.rand(<r>,<c>):返回给定大小的随机矩阵
#参数说明:
r:矩阵行数
c:矩阵列数
#只传入1个参数时,指定的是c,r默认设为1
#实例:
>>> a=np.matlib.rand(3,2)
>>> print(a)
[[0.21439311 0.48114605]
[0.40680903 0.06696259]
[0.08474975 0.99663275]]
>>> a=np.matlib.rand(3)
>>> print(a)
[[0.5019926 0.04551271 0.86878242]]
##########################################################
#Matrix与Ndarray对象的转换:
>>> i=np.matrix('1,2;3,4')
>>> print(i)
[[1 2]
[3 4]]
>>> j=np.asarray(i)
>>> print(j)
[[1 2]
[3 4]]
>>> k=np.asmatrix(j)
>>> print(k)
[[1 2]
[3 4]]
二.线性代数模块(linalg)
1.简介:
NumPy提供了线性代数函数库linalg,其中包含了线性代数所需的所有功能
注意:该子模块无需单独导入
2.方法:
np.linalg.det(A):返回方阵A的行列式
#如果A是高维数组,将其视为多个方阵(第n,n-1维)分别求行列式,返回所有行列式构成的数组
#实例:
>>> print(np.linalg.det([[1,2,0],[4,2,3],[7,8,4]]))
-5.999999999999997
>>> print(np.linalg.det([[1,2,0],[4,2,3],[7,8,4],[1,2,3]]))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<__array_function__ internals>", line 6, in det
File "C:\Users\1234\AppData\Roaming\Python\Python37\site-packages\numpy\linalg\linalg.py", line 2113, in det
_assert_stacked_square(a)
File "C:\Users\1234\AppData\Roaming\Python\Python37\site-packages\numpy\linalg\linalg.py", line 213, in _assert_stacked_square
raise LinAlgError('Last 2 dimensions of the array must be square')
numpy.linalg.LinAlgError: Last 2 dimensions of the array must be square
>>> print(np.linalg.det([[[1,2,0],[4,2,3],[7,8,4]],[[1,3,2],[0,1,2],[3,1,2]]]))
[-6. 12.]
######################################################################################################################
np.linalg.solve(A,B):求解线性方程组AX=B
#实例:
>>> np.linalg.solve([[1,2,3,0],[2,3,1,2],[3,1,2,4],[1,2,3,4]],[1,2,3,4])
array([-0.25, 0.25, 0.25, 0.75])
>>> np.linalg.solve([[1,2],[3,4]],[[1,1],[2,2]])
array([[0. , 0. ],
[0.5, 0.5]])
######################################################################################################################
np.linalg.inv(A):返回矩阵A的逆矩阵
#实例:
>>> np.linalg.inv([[1,2,3],[2,1,4],[4,5,1]])
array([[-0.7037037 , 0.48148148, 0.18518519],
[ 0.51851852, -0.40740741, 0.07407407],
[ 0.22222222, 0.11111111, -0.11111111]])
>>> np.linalg.inv([[0,1],[0,0]])#矩阵不可逆
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<__array_function__ internals>", line 6, in inv
File "C:\Users\1234\AppData\Roaming\Python\Python37\site-packages\numpy\linalg\linalg.py", line 547, in inv
ainv = _umath_linalg.inv(a, signature=signature, extobj=extobj)
File "C:\Users\1234\AppData\Roaming\Python\Python37\site-packages\numpy\linalg\linalg.py", line 97, in _raise_linalgerror_singular
raise LinAlgError("Singular matrix")
numpy.linalg.LinAlgError: Singular matrix
######################################################################################################################
(solution,residuals,rank,sv)=np.linalg.lstsq(A,B[,rcond="warn"]):求解线性方程组AX=B
#参数说明:
solution:返回方程组的解;为array/matrix
rank:返回A为几阶矩阵;为int
sv:返回A的奇异值;为array
#实例:
>>> np.linalg.lstsq([[1,2,3,0],[2,3,1,2],[3,1,2,4],[1,2,3,4]],[1,2,3,4])
(array([-0.25, 0.25, 0.25, 0.75]), array([], dtype=float64), 4, array([8.80282469, 2.93280054, 1.98236121, 1.40684136]))
>>> np.linalg.lstsq([[1,2,3,0],[2,3,1,2],[3,1,2,4],[1,2,3,4]],[[1,2,3,4],[2,3,4,5],[3,4,5,6],[4,5,6,7]])
(array([[-0.25 , -0.08333333, 0.08333333, 0.25 ],
[ 0.25 , 0.41666667, 0.58333333, 0.75 ],
[ 0.25 , 0.41666667, 0.58333333, 0.75 ],
[ 0.75 , 0.75 , 0.75 , 0.75 ]]), array([], dtype=float64), 4, array([8.80282469, 2.93280054, 1.98236121, 1.40684136]))
######################################################################################################################
X=np.linalg.eig(A):求矩阵A的特征值和特征向量
#参数说明:
X:X[1]为属于X[0][0]的特征向量,X[2]为属于X[0][1]的特征向量...
#实例:
>>> np.linalg.eig([[1,0],[0,1]])
(array([1., 1.]), array([[1., 0.],
[0., 1.]]))
######################################################################################################################
(U,S,V)=np.linalg.svd(M[,full_matrices=1,compute_uv=1]):对矩阵M进行奇异值分解
#实例:
>>> np.linalg.svd([[1,2],[3,4]])
(array([[-0.40455358, -0.9145143 ],
[-0.9145143 , 0.40455358]]), array([5.4649857 , 0.36596619]), array([[-0.57604844, -0.81741556],
[ 0.81741556, -0.57604844]]))
三.随机数模块
参见:https://blog.csdn.net/vicdd/article/details/52667709