python使用numpy进行矩阵操作练习

2023-12-13 12:43:33

最近想起来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)

文章来源:https://blog.csdn.net/m0_72678953/article/details/134968468
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。