我可以像这样求解系统方程(使用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)
问题是:怎么能做到呢?
查看文档页面。如果你想解多个线性方程组你可以输入多个数组但它们必须是形状为(N,M,M)
的。这将被认为是N
MxM
阵列的堆栈。引用自下面的文档页,
上面列出的几个线性代数例程能够一次计算多个矩阵的结果,如果它们被堆叠到同一个数组中。这在文档中通过输入参数规范指出,例如a:(…, 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
解向量)。