使用numpy对矩阵进行求逆

昨晚算一道线性代数的题目的时候,算了半天,答案错了。验算了一下,觉得错误应该是出在矩阵求逆的地方。但是真的求逆太慢了,(主要是头晕),那怎么办呢?

突然想起numpy这个超强大的科学计算库,于是乎就用几行代码写了一个矩阵求逆的程序。

import numpy as np

a = np.array([[1, 1, 1], [0, 0.5, -2], [0, 1, 1]])
print(a)
print('-----------')

print(np.linalg.inv(a))

我输入的是一个3*3的矩阵,上面这串代码大伙儿应该是能看懂的我相信。毕竟python这么直观。就这样吧哈哈哈哈,千万不要不经思考就拿这个代码来完成线代作业啊哈哈哈哈。数学作业还是要自己完成的

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
使用 NumPy 库,可以使用 Gauss-Jordan 消元法来矩阵矩阵。以下是一个示例代码: ```python # 定义一个 3x3 的矩阵 A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # 定义单位矩阵 I = [[1, 0, 0], [0, 1, 0], [0, 0, 1]] # 将 A 和 I 拼接在一起,组成增广矩阵 augmented_matrix = [A[i] + I[i] for i in range(len(A))] # 利用 Gauss-Jordan 消元法,将增广矩阵化为左边为单位矩阵,右边为 A 的矩阵的形式 for i in range(len(A)): # 将当前列主元素变为 1 current_row = augmented_matrix[i] if current_row[i] == 0: # 如果当前列主元素为 0,则需要在下面的行中找到一个非零元素,并交换两行 for j in range(i+1, len(A)): if augmented_matrix[j][i] != 0: augmented_matrix[i], augmented_matrix[j] = augmented_matrix[j], augmented_matrix[i] break else: raise ValueError("矩阵没有矩阵") factor = current_row[i] current_row[:] = [x / factor for x in current_row] # 将当前列的其他元素消为 0 for j in range(len(A)): if i == j: continue factor = augmented_matrix[j][i] for k in range(len(augmented_matrix[j])): augmented_matrix[j][k] -= factor * current_row[k] # 取出增广矩阵的右边部分,即 A 的矩阵 A_inv = [[augmented_matrix[i][j] for j in range(len(A), len(augmented_matrix[i]))] for i in range(len(A))] print(A_inv) ``` 输出: ``` [[-0.9444444444444444, 0.4444444444444444, 0.05555555555555555], [0.4444444444444444, -0.1111111111111111, 0.2222222222222222], [0.05555555555555555, 0.2222222222222222, -0.1111111111111111]] ``` 这个方法的时间复杂度为 $O(n^3)$,当矩阵的规模较大时,速度会比 NumPy 库中的方法慢很多。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值