矩阵是numpy.matrix类的对象
该类继承自numpy.ndarray,所以任何针对多维数组的操作,对矩阵同样有效
但是作为子类矩阵又结合其自身的特点,做了必要的扩充,
比如:乘法计算(行*列)、求逆等。
矩阵的创建
#方法1
numpy.matrix(ary,copy=True)
#参数:
#ary:任何可被解释为矩阵的二维容器(经常为二维数组)
#copy:是否复制数据(缺省值为True时复制数据,与原容器相互独立)
#方法2
numpy.mat(任何可被解释为矩阵的二维容器)
#等价于numpy.matrix中copy=False,与原容器共享数据,不拥有独立的书拷贝(改一个另一个也改了)
#方法3
#该函数可以接受字符串形式的矩阵描述
#数据项通过空格分隔,数据行通过分号分隔,如:'1 2 3; 4 5 6'
numpy.mat(拼块规则)
示例
import numpy as np
ary = np.arange(1,9).reshape(2,4)
print(ary,type(ary))
#matrix复制出独立数据空间
m1 = np.matrix(ary)
print(m1,type(m1)) #type为numpy.matrix
#mat 共享数据空间
m2 = np.mat(ary)
print(m2,type(m2))
#字符串拼块规则
print(np.mat('1 2 3; 4 5 6')) #输出[[1 2 3] [4 5 6]]
矩阵的乘法运算
矩阵的乘法:矩阵A的每一行上的元素与对应的矩阵B的列上的元素依次相乘再相加(点积),所以矩阵A的行数要与矩阵B的列数一样,得到的新矩阵的shape为:(矩阵A的行数,矩阵B的列数)
numpy提供了方法让多维数组使用矩阵的运算
a = np.array([
[1,2,6],
[3,5,7],
[4,8,9]
])
#点乘法求ndarray的点乘结果,与矩阵的乘法运算结果相同
k = a.dot(a)
#linalg模块中的 inv方法求a的逆矩阵
l = np.linalg.inv(a)
矩阵的逆矩阵
若两个矩阵A,B满足:AB = BA = E(E为单位矩阵,其他矩阵与单位矩阵相乘还是自身,相当于和1相乘),则称A,B为逆矩阵
#创建矩阵
e = np.mat('1 2 6;3 5 7;4 8 9')
print(e.I) #获得逆矩阵(不是所有矩阵都有逆矩阵)
print(e * e.I) #E单位矩阵
矩阵的应用
求斐波那契数列
f = np.mat('1 1; 1 0')
for i in range(1,20):
print(f ** i, '<-',i) #求得的矩阵都是符合斐波那契数列的