Python实现矩阵代数基础计算

import numpy as np


def get_row(matrix, row):
    return matrix[row]


def get_column(matrix, column_number):
    column = []
    for i in range(len(matrix)):
        column.append(matrix[i][column_number])
    return column


#行与列的点积
def dot_product(vector_one, vector_two):
    if len(vector_one)!=len(vector_two):
        return
    else:
        result=0
        for i in range(len(vector_one)):
            result+=vector_one[i]*vector_two[i]
        return result


def matrix_multiplication(matrixA, matrixB):

    m_rows = len(matrixA)
    p_columns = len(matrixB[0])
    result=np.zeros((m_rows,p_columns))
    for i in range(m_rows):
        for j in range(p_columns):
            result[i][j]+=dot_product(get_row(matrixA,i), get_column(matrixB,j))
    print(result)


#矩阵转置
def transpose(m):
    T=[list(i)for i in zip(*m)]
    return T

def minus(matrixA,matrixB):
    if (len(matrixA)==len(matrixB))and(len(matrixA[0])==len(matrixB[0])):
        for i in range(len(matrixA)):
            for j in range(len(matrixA[0])):
                matrixA[i][j] -= matrixB[i][j]
    return matrixA
#单位矩阵
def identity_matrix(num):
    id_matrix=np.zeros((num,num))
    for i in range(num):
        for j in range(num):
            if i == j:
                id_matrix[i][j] += 1
    return id_matrix

#矩阵求逆
def inverse_matrix(matrix):
    inverse = []

    if len(matrix) != len(matrix[0]):
        raise ValueError('The matrix must be square')
    if len(matrix) == 1:
        inverse.append(1.0 / matrix[0][0])
        return inverse
    elif len(matrix) == 2:
        det = matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]
        tr = matrix[0][0] + matrix[1][1]
        if det == 0:
            raise NotImplementedError('this functionality is not implemented')
        else:
            inverse=(1/det)*(minus(tr*identity_matrix(2),matrix))
            return inverse
    else:
        raise RuntimeError('this is the error message')
print(inverse_matrix([[100]]))
print(inverse_matrix([[4, 5], [14, 7]]))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值