我可以像这样解决系统方程式(使用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)
问题是:怎么做?
答案 0 :(得分:1)
查看docs页面。如果要解决多个线性方程组,可以发送多个数组,但它们必须具有形状(N,M,M)
。这将被视为N
MxM
数组的堆栈。来自以下文档页面的引用,
如果将多个矩阵堆叠到同一个数组中,则上面列出的几个线性代数例程能够一次计算几个矩阵的结果。这在文档中通过输入参数规范表示,例如:(...,M,M)array_like。这意味着如果例如给定输入数组a.shape ==(N,M,M),则将其解释为N个矩阵的“堆栈”,每个矩阵的大小为M-by-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
解决方案向量)。