问题描述
我正在尝试解线性方程3x+6y+7z = 10、2x+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 数组,因此 a
和 b
的维度不匹配。试试
-
b = np.array([[10],[11],[12]])
使得b
是一个 3×1 的数组,或者 -
b = np.array([10,11,12])
使得b
是一个长度为 3 的向量(它和b = [10,12]
一样,也可以被.solve()
接受;见 {{ 3}}).
前者会得到一个 3×1 的数组作为解,而后者会得到一个长度为 3 的向量。可能使用后者更好;通常我们并不真正关心向量是列向量还是行向量。 NumPy 通常以合理的方式处理向量。