NumPy 中的最小二乘法 您所在的位置:网站首页 python写矩阵乘法算法 NumPy 中的最小二乘法

NumPy 中的最小二乘法

2024-06-03 09:23| 来源: 网络整理| 查看: 265

本文将介绍如何用 Python 中的最小二乘法计算 AX = B。

Python 中带有 numpy.linalg.lstsq() 函数的最小二乘 NumPy

方程 AX = B 被称为线性矩阵方程。numpy.linalg.lstsq() 函数可用于在 Python 中使用最小二乘法求解线性矩阵方程 AX = B。实际上,这很简单。此函数采用矩阵并以另一个矩阵的形式返回线性矩阵方程的最小二乘解。请参考以下代码示例。

import numpy as np A = [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 0, 0]] B = [1, 1, 1, 1, 1] X = np.linalg.lstsq(A, B, rcond=-1) print(X[0])

输出:

[5.00000000e-01 5.00000000e-01 1.09109979e-16 1.64621130e-16]

在上面的代码中,我们使用 Python 中的 np.linalg.lstsq() 函数计算了线性矩阵方程 AX = B 的解。当我们开始向矩阵添加权重时,这种方法会变得有点棘手。我们可以使用两种主要方法来找到此类问题的解决方案。

第一个解决方案涉及使用带有 np.newaxis 说明符的数组索引来为权重添加新维度。它在下面的编码示例中进行了说明。

import numpy as np A = np.array([[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 0, 0]]) B = np.array([1, 1, 1, 1, 1]) W = np.array([1, 2, 3, 4, 5]) Aw = A * np.sqrt(W[:, np.newaxis]) Bw = B * np.sqrt(W) X = np.linalg.lstsq(Aw, Bw, rcond=-1) print(X[0])

输出:

[ 5.00000000e-01 5.00000000e-01 -4.40221936e-17 1.14889576e-17]

在上面的代码中,我们使用 Python 中的 np.newaxis 和 np.linalg.lstsq() 函数计算了线性矩阵方程 AX = B 的解以及权重 W。这种方法工作正常,但不是很容易理解和阅读。

第二种解决方案更具可读性和易于理解。它涉及将权重转换为对角矩阵,然后使用它。它在下面的编码示例中进行了演示。

import numpy as np A = [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 0, 0]] B = [1, 1, 1, 1, 1] W = [1, 2, 3, 4, 5] W = np.sqrt(np.diag(W)) Aw = np.dot(W, A) Bw = np.dot(B, W) X = np.linalg.lstsq(Aw, Bw, rcond=-1) print(X[0])

输出:

[ 5.00000000e-01 5.00000000e-01 -4.40221936e-17 1.14889576e-17]

在上面的代码中,我们通过将权重转换为对角矩阵,然后使用 np.linalg.lstsq() 函数计算了线性矩阵方程 AX = B 的解以及权重 W。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有