0

我可以像这样求解一个系统方程(使用 NumPY):

>>> a = np.array([[3,1], [1,2]])
>>> b = np.array([9,8])
>>> y = np.linalg.solve(a, b)
>>> y
array([ 2.,  3.])

但是,如果我得到这样的东西:

>>> x = np.linspace(1,10)
>>> a = np.array([[3*x,1-x], [1/x,2]])
>>> b = np.array([x**2,8*x])
>>> y = np.linalg.solve(a, b)

它不起作用,其中矩阵的系数是数组,我想为数组“x”的每个元素计算数组解“y”。另外,我无法计算

>>> det(a)

问题是:如何做到这一点?

4

1 回答 1

1

查看文档页面。如果您想求解多个线性方程组,您可以发送多个数组,但它们必须具有 shape (N,M,M)。这将被视为一堆N MxM数组。以下文档页面的引用,

如果将多个矩阵堆叠到同一个数组中,则上面列出的几个线性代数例程能够一次计算多个矩阵的结果。这在文档中通过输入参数规范表示,例如:(..., M, M) array_like。这意味着,例如,如果给定一个输入数组 a.shape == (N, M, M),它将被解释为 N 个矩阵的“堆栈”,每个矩阵的大小为 M×M。类似的规范适用于返回值,例如行列式具有 det : (...) 并且在这种情况下将返回一个形状为 det(a).shape == (N,) 的数组。这推广到高维数组上的线性代数运算:多维数组的最后 1 维或 2 维被解释为向量或矩阵,适用于每个操作。

当我运行你的代码时,我得到,

>>> a.shape
(2, 2)

>>> b.shape
(2, 50)

不确定您要解决的确切问题,但您需要重新考虑您的输入。你想要a有形(N,M,M)b有形(N,M)。然后你会得到一个形状数组(N,M)(即N解向量)。

于 2014-07-24T20:48:53.960 回答