Python不使用库进行矩阵运算详解

 更新时间:2023年08月23日 09:37:58   作者:小小草帽  
这篇文章主要介绍了Python不使用库进行矩阵运算详解,矩阵乘法中,需要判断两个矩阵是否可以进行相乘,即前一个矩阵的列是否等于后一个矩阵的行,,需要的朋友可以参考下

Python矩阵运算 

矩阵乘法

矩阵乘法中,需要判断两个矩阵是否可以进行相乘,即前一个矩阵的列是否等于后一个矩阵的行。具体代码如下:

class Solution:
    def multiplyofmatrix(self, A, f):
        """
        Compute matrix A * matrix f.
        For example:
        Input:
        A: [[1, 2], [3, 4]]    Row of A: 2 Col of A: 2
        f: [[1, 2], [3, 4]]    Row of f: 2 Col of f: 2
        Output:
        ans: [[7, 10], [15, 22]]
        s.t. A.col == f.col
        """
        Arow, Acol = len(A), len(A[0])
        frow, fcol = len(f), len(f[0])
        if Acol != frow:
            return 'False!'
        ans = [[0] * fcol for _ in range(Arow)]
        for i in range(fcol):
            for j in range(Arow):
                for k in range(frow):
                    ans[j][i] += A[j][k]*f[k][i]
        return ans
if __name__=='__main__':
    a = Solution().multiplyofmatrix([[1, 2], [3, 4]], [[1, 2], [3, 4]])
    print(a)

转置矩阵

    def transposeofmatrix(A):
        """
        Matrix transpose.
        For example:
        Input:
        A = [[1, 2],
             [3, 4]]
        Output:
        A_transpose = [[1, 3],
                       [2, 4]]
        """
        return [list(raw) for raw in zip(*A)]

矩阵余矩阵

    def submatrix(A, i, j):
        # 矩阵A第i行第j列元素的余矩阵
        m, n = len(A), len(A[0])
        C = [[A[x][y] for y in range(n) if y != j] for x in range(m) if x != i]  # 列表推导式
        return C

矩阵行列式

需要用到矩阵余矩阵函数,代码如下:

    def detofmatrix(A):
        m = len(A)  # 矩阵的行数
        n = len(A[0])  # 矩阵的列数
        if (m == 1 and n == 1):
            return A[0][0]
        else:
            value = 0
            for j in range(n):
                value += ((-1) ** (j + 2)) * A[0][j] * detofmatrix(submatrix(A, 0, j))
            return value

矩阵的逆

需要用到矩阵行列式函数和余矩阵函数,代码如下:

    def inverseofmatrix(A):
        m = len(A)  # 矩阵的行数
        n = len(A[0])  # 矩阵的列数
        C = [[0] * n for _ in range(m)]
        d = self.detofmatrix(A)
        for i in range(m):
            for j in range(n):
                C[i][j] = ((-1) ** (i + j + 2)) * detofmatrix(submatrix(A, j, i))
                C[i][j] = C[i][j] / d
        return C

求方程组根

求∣ A x − b ∣ = 0即为求 x = A-1 ∗b(A可逆的情况下),调用求逆函数和矩阵相乘函数即可。

求一元n次方程正实数根

例如:  x+ ax+bx = c,其中a, b, c, 均为正整数,求正实数根。

到此这篇关于Python不使用库进行矩阵运算详解的文章就介绍到这了,更多相关Python矩阵运算内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 跟老齐学Python之变量和参数

    跟老齐学Python之变量和参数

    对于变量和参数,不管是已经敲代码多年的老鸟,还是刚刚接触编程的小白,都会有时候清楚,有时候又有点模糊。因为,在实际应用中,它们之间分分离离,比如,敲代码都知道,x=3中x是变量,它不是参数,但是在函数y=3x+4中,x是变量,也是参数。
    2014-10-10
  • 分享13个非常有用的Python代码片段

    分享13个非常有用的Python代码片段

    大家好,这篇文章主要和大家分享13个Python中非常有用的代码片段,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-06-06
  • python连接手机自动搜集蚂蚁森林能量的实现代码

    python连接手机自动搜集蚂蚁森林能量的实现代码

    这篇文章主要介绍了python连接手机自动搜集蚂蚁森林能量的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • 如何在python中实现随机选择

    如何在python中实现随机选择

    这篇文章主要介绍了如何在python中实现随机选择,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • numpy最值、求和的实现

    numpy最值、求和的实现

    本文主要介绍了numpy最值、求和的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • python 破解加密zip文件的密码

    python 破解加密zip文件的密码

    这篇文章主要介绍了python 如何破解加密zip文件的密码,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-04-04
  • 玩转串口通信:利用pyserial库,Python打开无限可能

    玩转串口通信:利用pyserial库,Python打开无限可能

    想要学习如何使用pyserial库实现串口通信吗?这篇指南将带你一步步了解Python中的串口通信,无论是控制硬件设备还是与外部设备进行数据交换,pyserial库都能为你提供便捷的解决方案,快来跟着我们的指南,轻松掌握串口通信的技巧吧!
    2023-11-11
  • python基础之函数

    python基础之函数

    这篇文章主要介绍了python的函数,实例分析了Python中返回一个返回值与多个返回值的方法,需要的朋友可以参考下
    2021-10-10
  • Python 2种方法求某个范围内的所有素数(质数)

    Python 2种方法求某个范围内的所有素数(质数)

    这篇文章主要介绍了Python 2种方法求某个范围内的所有素数(质数),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • PyTorch中反卷积的用法详解

    PyTorch中反卷积的用法详解

    今天小编就为大家分享一篇PyTorch中反卷积的用法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12

最新评论