矩阵
矩阵有三个主要的用途。第一是解线性方程组,比如二维矩阵可以理解为一个平面直角坐标系内的点集,通过计算点与点之间的距离,完成聚类、分类或预测,类似的运算可以扩展到多维的情况。第二个用途是方程降次,也就是利用矩阵的二次型,通过升维将线性不可分的数据集映射到高维中,转换为线性可分的情形,这是支持向量机的基本原理之一。第三个用途是变换,矩阵可以通过特征值和特征向量完成维度约简,简化类似图片这种高维数据集的运算,主成分分析就是用这个原理。
在程序设计中,我, 可以把矩阵理解为一个二维数组。以python为例,矩阵就是嵌套若干个list的一个大list。内部的每个list都是等长的,其中每个元素都是整型或浮点型的数值。内部的list就是行向量,即一个对象。
NumPy数据包提供了专门的矩阵数据结构和线性代数库。
import numpy as np
mylist =[1,2,3,4,5]
length = len(mylist)
a=10
for indx in range(length):
mylist[indx] = a*mylist[indx]
print (mylist)
#矢量化编程
mylist2 =[1,2,3,4,5]
mymatrix = np.mat(mylist2)
print(a*mymatrix)
#矩阵初始化
myzero = np.zeros([3,5])
print(myzero)
myone = np.ones([3,5])
print(myone)
myrand = np.random.rand(3,4) #生成0-1之间的随机数矩阵
print(myrand)
myeye = np.eye(3) #单位阵
print(myeye)
#矩阵元素运算
from numpy import *
myones = ones([3,3])
myeyes = eye(3)
print(myones + myeyes)
print(myones - myeyes)
print(sum(myones)) #所有元素求和
#矩阵各元素的积
mymatrix = mat([[1,2,3],[4,5,6],[7,8,9]])
mymatrix2 = 1.5 * ones([3,3])
print (multiply(mymatrix,mymatrix2))
#矩阵各元素的n次幂
mylist = mat([[1,2,3],[4,5,6],[7,8,9]])
print(power(mylist,2))
#矩阵的乘法
mymatrix2 = mat([[1,2,3],[4,5,6],[7,8,9]])
mymatrix3 = mat([[1],[2],[3]])
print(mymatrix2 * mymatrix3)
#矩阵转置
print (mymatrix2.T)
print (mymatrix2.transpose())
[m,n] = shape(mymatrix2)
print("矩阵的行列数:",m,n)
print("按行切片: ",mymatrix2[0])
print("按列切片: ",mymatrix2.T[0])
print("矩阵的复制: ",mymatrix2.copy())
print("矩阵的比较: ",mymatrix2<mymatrix2.T)
NumPy的Linalg库可以满足大多数的线性代数运算。
from numpy import *
print("方阵的行列式: ",linalg.det(mymatrix2))
print("矩阵的逆:",linalg.inv(mymatrix2))
At = mymatrix2.T
print("矩阵的对称: ",mymatrix2*At)
print("矩阵的秩: ",linalg.matrix_rank(mymatrix2))
#可逆矩阵求解
A = mat([[1,2,4,5,7],[9,12,11,8,2],[6,4,3,2,1],[9,1,3,4,5],[0,2,3,4,1]])
b = [1,0,1,0,1]
s = linalg.solve(A, mat(b).T)
print (s)