我需要用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()
很有意义。
任何提示?
答案 0 :(得分:4)
在NumPy 1.8及更高版本中,numpy.linalg.solve
actually broadcasts。对于numpy.linalg.solve(a, b)
,如果b.ndim == a.ndim - 1
,它将执行广播矩阵向量求解;否则,它将进行广播矩阵矩阵求解。 (这个决定标准没有记录;我必须查看来源。)
如果你能有效地构建A
和rhs
的堆栈,你可以调用solve
一次并避免Python循环。