使用 NumPy 求解线性方程

问题描述

我正在尝试解线性方程3x+6y+7z = 102x+y+8y = 11 & x+3y+7z = 22 使用 Python 和 NumPy 库。

import numpy as np
a = np.array([[3,6,7],[2,1,8],[1,3,7]])
b = np.array([[10,11,22]])
np.linalg.solve(a,b)

但无法弄清楚我在上面的代码中做错了什么导致抛出以下错误

ValueError: 解决:输入操作数 1 在其核心维度 0 中存在不匹配,具有 gufunc 签名 (m,m),(m,n)->(m,n)(大小 1 与 3 不同)>

解决方法

您的 b 是一个 1×3 数组,因此 ab 的维度不匹配。试试

  1. b = np.array([[10],[11],[12]]) 使得 b 是一个 3×1 的数组,或者

  2. b = np.array([10,11,12]) 使得 b 是一个长度为 3 的向量(它和 b = [10,12] 一样,也可以被 .solve() 接受;见 {{ 3}}).

前者会得到一个 3×1 的数组作为解,而后者会得到一个长度为 3 的向量。可能使用后者更好;通常我们并不真正关心向量是列向量还是行向量。 NumPy 通常以合理的方式处理向量。