解决大量小型线性系统问题

时间:2016-06-29 16:33:28

标签: python numpy scipy

我需要用Python解决大量3x3对称,正定系统。到目前为止,我做了

res = numpy.zeros(n)
for k, obj in enumerate(data_array):
    # construct A, rhs, idx from obj
    res[idx] += numpy.linalg.solve(A, rhs)

这会产生正确的结果,但如果n很大,也会很慢。 (嗯......是的。)也许3x3不是一个问题大小,调用solve()很有意义。

任何提示?

1 个答案:

答案 0 :(得分:4)

在NumPy 1.8及更高版本中,numpy.linalg.solve actually broadcasts。对于numpy.linalg.solve(a, b),如果b.ndim == a.ndim - 1,它将执行广播矩阵向量求解;否则,它将进行广播矩阵矩阵求解。 (这个决定标准没有记录;我必须查看来源。)

如果你能有效地构建Arhs的堆栈,你可以调用solve一次并避免Python循环。