最近想起来numpy运行矩阵基础太差了,想着来学习一下,顺便记录一下
需要代码的小伙伴也可以自己copy然后封装一下拿去测试qwq
import numpy as np
list1 = [1, 2, 3]
list2 = [4, 5, 6]
# 打印横线
def printTopicLine():
print("----------------------------------")
# 全局打印方法
def globalPrint(matrix,msg):
print("消息:",msg,"结果如下:\n",matrix,"\n",matrix.shape)
printTopicLine()
# 创建矩阵并获得类型
def generateMatrix(list1, list2):
# 演示
maxA = np.mat([list1, list2])
globalPrint(maxA, "创建矩阵并获得类型")
return maxA
# 打印转置矩阵和规格
def transPositon(matrix):
print(matrix.T, matrix.T.shape)
# np.array生成二维矩阵
def twoDimeArray(list1,list2):
newArray=np.array([list1,list2])
globalPrint(newArray, "打印新矩阵的原始")
globalPrint(newArray.T, "打印新矩阵的转置")
matrixA=np.array([list1,list2])
matrixB=np.array([list2,list1])
# 矩阵加法
def matrixAdd(matrixA, matrixB):
print("打印matrixA:\n{},matrixB:\n{}".format(matrixA,matrixB))
newMatrix=matrixA+matrixB
globalPrint(newMatrix,"矩阵加法")
# 矩阵减法
def matrixSub(matrixA, matrixB):
print("打印matrixA:\n{},matrixB:\n{}".format(matrixA,matrixB))
newMatrix=matrixA-matrixB
globalPrint(newMatrix,"矩阵减法")
# 矩乘法
def matrixMul(matrixA,matrixB):
print("joint us")
newMatrix=np.dot(matrixA,matrixB)
globalPrint(newMatrix,"矩乘法")
# 生成单位阵
def generateEye(n):
newEye=np.eye(n)
globalPrint(newEye,"生成单位阵")
# 验证乘法的转置 等于 转置的树乘
def checkTransformMul(matrixA):
newMatrixA=(7*matrixA).T
newMatrixB=7*(matrixA.T)
print("验证乘法的转置 等于 转置的数乘,result:{}".format(newMatrixA == newMatrixB))
# 使用is就是False
globalPrint( newMatrixA,"打印等式左边")
globalPrint( newMatrixB,"打印等式右边")
# 验证数字乘法结合律会不会生成新对象
def checkGenerateNewObject(numa,numb):
newNumA = (7 * numa) * numb
newNumB = 7 * (numa * numb)
print("验证数字乘法结合律会不会生成新对象,result:{}".format("不会" if newNumA is newNumB else "会"))
printTopicLine()
# 获取矩阵的迹之和
def getTranceValue(matrix):
values=np.trace(matrix)
globalPrint(matrix,"获取矩阵的迹之和")
print("获取矩阵的迹之和:{}".format(values))
# 验证方阵的迹等于方阵的转置的迹
def checkJiEqual(matrix):
print("验证方阵的迹等于方阵的转置的迹,result:{}".format(np.trace(matrix) == np.trace(matrix.T)))
printTopicLine()
# 测试一个不可逆行列式
testMatrix=np.array([[1,2,3],[4,5,6],[7,8,9]])
# 计算行列式的值
def getMatrixValue(matrix):
print("计算行列式的值,result:{}".format(np.linalg.det(matrix)))
printTopicLine()
InvMatrix=np.array([[1,0,0],[0,5,0],[0,0,9]])
# 求方阵的逆矩阵 注意有误差 有时候不可逆的矩阵会算出来极小的值
def getMatrixInverse(matrix):
globalPrint(np.linalg.inv(matrix),"求方阵的逆矩阵")
# 矩阵幂运算
def powTest(matrix,nums):
# newMatrix=matrix**nums
newMatrix=np.linalg.matrix_power(matrix,nums)
globalPrint(newMatrix,"矩阵幂运算")
if __name__ == "__main__":
print("开始")
maxA=generateMatrix(list1,list2)
transPositon(maxA)
twoDimeArray(list1, list2)
matrixAdd(matrixA, matrixB)
matrixSub(matrixA, matrixB)
matrixMul(matrixA,matrixA.T)
generateEye(5)
checkTransformMul(matrixA)
checkGenerateNewObject(13, 17)
getTranceValue(matrixA)
checkJiEqual(matrixA)
getMatrixValue(testMatrix)
getMatrixInverse(InvMatrix)
powTest(testMatrix, 2)
matrixMul(testMatrix,testMatrix)