NumPy 矩阵库(Matrix)
NumPy 中包含了一个矩阵库 numpy.matlib,该模块中的函数返回的是一个矩阵,而不是 ndarray 对象。 一个m*n 的矩阵是一个由行(mrow)列n(column)元素排列成的矩形阵列。
矩阵里的元素可以是数字、符号或数学式。以下是一个由 6 个数字元素构成的 2 行 3 列的矩阵:
matlib.empty()
matlib.empty() 函数返回一个新的矩阵,语法格式为:
numpy.matlib.empty(shape, dtype, order)
返回给定形状和类型的新矩阵,而不初始化条目。
参数说明:
- shape: 定义新矩阵形状的整数或整数元组
- Dtype: 可选,数据类型
- order: C(行序优先) 或者 F(列序优先)
>>> import numpy.matlib
>>> np.matlib.empty((2, 2)) # filled with random data
matrix([[ 6.76425276e-320, 9.79033856e-307],
[ 7.39337286e-309, 3.22135945e-309]]) #random
>>> np.matlib.empty((2, 2), dtype=int)
matrix([[ 6600475, 0],
[ 6586976, 22740995]]) #random
numpy.matlib.zeros()
numpy.matlib.zeros() 函数创建一个以 0 填充的矩阵。
shape
:int或ints序列矩阵的形状dtype
:数据类型,可选矩阵的所需数据类型,默认为float。order
:{'C','F'},可选是否以C或Fortran连续顺序存储结果,默认值为“C”。
如果shape
具有长度一即(N,)
或者是标量N
,则out形状矩阵(1,N)
。
>>> import numpy.matlib
>>> np.matlib.zeros((2, 3))
matrix([[ 0., 0., 0.],
[ 0., 0., 0.]])
>>> np.matlib.zeros(2)
matrix([[ 0., 0.]])
numpy.matlib.ones()
矩阵的一。
返回给定形状和类型的矩阵,用一个填充。
shape:{sequence of ints,int} 矩阵的形状
dtype:数据类型,可选 矩阵的所需数据类型,默认为np.float64。
order:{'C','F'},可选是否以C或Fortran连续顺序存储矩阵,默认值为“C”。
>>> np.matlib.ones((2,3))
matrix([[ 1., 1., 1.],
[ 1., 1., 1.]])
>>> np.matlib.ones(2)
matrix([[ 1., 1.]])
numpy.matlib.eye()
numpy.matlib.eye() 函数返回一个矩阵,对角线元素为 1,其他位置为零。
numpy.matlib.eye(n, M,k, dtype)
参数说明:
- n: 返回矩阵的行数
- M: 返回矩阵的列数,默认为 n
- k: 对角线的索引 , 0表示主对角线,正值表示上对角线,负值表示下对角线。
- dtype: 数据类型
>>> import numpy.matlib
>>> np.matlib.eye(3, k=1, dtype=float)
matrix([[ 0., 1., 0.],
[ 0., 0., 1.],
[ 0., 0., 0.]])
numpy.eye
等效数组功能。
numpy.matlib.identity()
numpy.matlib.identity(n,dtype=None)
函数返回给定大小的单位矩阵。
单位矩阵是个方阵,从左上角到右下角的对角线(称为主对角线)上的元素均为 1,除此以外全都为 0。
n:int 返回的单位矩阵的大小。
dtype:数据类型,可选 输出的数据类型。默认为
float
。
>>> import numpy.matlib
>>> np.matlib.identity(3, dtype=int)
matrix([[1, 0, 0],
[0, 1, 0],
[0, 0, 1]])
numpy.identity
等效数组功能。
numpy.matlib.rand()
numpy.matlib.rand(*args)
函数创建一个给定大小的矩阵,数据是随机填充的。
返回具有给定形状的随机值矩阵。
创建给定形状的矩阵,并通过[0, 1)
的均匀分布的随机样本传播它。
* args:参数
输出形状。如果给定为N个整数,每个整数指定一个维度的大小。如果给出一个元组,这个元组给出完整的形状。
>>> import numpy.matlib
>>> np.matlib.rand(2, 3)
matrix([[ 0.68340382, 0.67926887, 0.83271405],
[ 0.00793551, 0.20468222, 0.95253525]]) #random
>>> np.matlib.rand((2, 3))
matrix([[ 0.84682055, 0.73626594, 0.11308016],
[ 0.85429008, 0.3294825 , 0.89139555]]) #random
如果第一个参数是元组,则忽略其他参数:
>>> np.matlib.rand((2, 3), 4)
matrix([[ 0.46898646, 0.15163588, 0.95188261],
[ 0.59208621, 0.09561818, 0.00583606]]) #random
nump.mat()
将输入解释为矩阵。
numpy.mat(data, dtype=None)
data:array_like 输入数据。
dtype:数据类型 输出矩阵的数据类型。
>>> from numpy import *
>>> a1=array([1,2,3])
>>> a1
array([1, 2, 3])
>>> a1=mat(a1)
>>> a1
matrix([[1, 2, 3]])
>>> shape(a1)
(1, 3)
>>> b=matrix([1,2,3])
>>> shape(b)
(1, 3)
创建常见的矩阵
>>>data1=mat(zeros((3,3))) #创建一个3*3的零矩阵,矩阵这里zeros函数的参数是一个tuple类型(3,3)
>>> data1
matrix([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
>>>data2=mat(ones((2,4))) #创建一个2*4的1矩阵,默认是浮点型的数据,如果需要时int类型,可以使用dtype=int
>>> data2
matrix([[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]])
>>>data3=mat(random.rand(2,2)) #这里的random模块使用的是numpy中的random模块,random.rand(2,2)创建的是一个二维数组,需要将其转换成#matrix
>>> data3
matrix([[ 0.57341802, 0.51016034],
[ 0.56438599, 0.70515605]])
>>>data4=mat(random.randint(10,size=(3,3))) #生成一个3*3的0-10之间的随机整数矩阵,如果需要指定下界则可以多加一个参数
>>> data4
matrix([[9, 5, 6],
[3, 0, 4],
[6, 0, 7]])
>>>data5=mat(random.randint(2,8,size=(2,5))) #产生一个2-8之间的随机整数矩阵
>>> data5
matrix([[5, 4, 6, 3, 7],
[5, 3, 3, 4, 6]])
>>>data6=mat(eye(2,2,dtype=int)) #产生一个2*2的对角矩阵
>>> data6
matrix([[1, 0],
[0, 1]])
a1=[1,2,3]
a2=mat(diag(a1)) #生成一个对角线为1、2、3的对角矩阵
>>> a2
matrix([[1, 0, 0],
[0, 2, 0],
[0, 0, 3]])
矩阵运算
矩阵相乘
a1=mat([1,2]);
a2=mat([[1],[2]]);
a3=a1*a2;
#1*2的矩阵乘以2*1的矩阵,得到1*1的矩阵
矩阵点乘(矩阵对应元素相乘)
矩阵对应元素相乘
a1=mat([3,1])
a2=mat([2,2])
a3=multiply(a1,a2)
# matrix([[6, 2]])
矩阵求逆,转置
矩阵求逆
>>>a1=mat(eye(2,2)*0.5)
>>> a1
matrix([[ 0.5, 0. ],
[ 0. , 0.5]])
>>>a2=a1.I #求矩阵matrix([[0.5,0],[0,0.5]])的逆矩阵
>>> a2
matrix([[ 2., 0.],
[ 0., 2.]])
矩阵转置
>>> a1=mat([[1,1],[0,0]])
>>> a1
matrix([[1, 1],
[0, 0]])
>>> a2=a1.T
>>> a2
matrix([[1, 0],
[1, 0]])
矩阵的分隔和合并
矩阵的分隔,同列表和数组的分隔一致。
>>>a=mat(ones((3,3)))
>>> a
matrix([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])
>>>b=a[1:,1:] #分割出第二行以后的行和第二列以后的列的所有元素
>>> b
matrix([[ 1., 1.],
[ 1., 1.]])
矩阵的合并
>>>a=mat(ones((2,2)))
>>> a
matrix([[ 1., 1.],
[ 1., 1.]])
>>>b=mat(eye(2))
>>> b
matrix([[ 1., 0.],
[ 0., 1.]])
>>>c=vstack((a,b)) #按列合并,即增加行数
>>> c
matrix([[ 1., 1.],
[ 1., 1.],
[ 1., 0.],
[ 0., 1.]])
>>>d=hstack((a,b)) #按行合并,即行数不变,扩展列数
>>> d
matrix([[ 1., 1., 1., 0.],
[ 1., 1., 0., 1.]])
扩展矩阵函数tile()
tile(inX, (i,j))
;i是扩展个数,j是扩展长度
>>>x=mat([0,0,0])
>>> x
matrix([[0, 0, 0]])
>>> tile(x,(3,1)) #即将x扩展3个,j=1,表示其列数不变
matrix([[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
>>> tile(x,(2,2)) #x扩展2次,j=2,横向扩展
matrix([[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]])