首页 > 解决方案 > 使用 NumPy 求解线性方程

问题描述

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

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 不同)

标签: pythonnumpylinear-equation

解决方案


b是一个 1×3 数组,因此 和 的尺寸ab匹配。尝试

  1. b = np.array([[10], [11], [12]])所以这b是一个 3×1 数组,或者

  2. b = np.array([10, 11, 12])所以这b是一个长度为 3 的向量(它和 just 一样b = [10, 11, 12],也可以被 接受.solve();参见文档)。

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


推荐阅读