现在,我正在使用numpy.linalg.solve求解矩阵,但是事实是我正在使用它求解5000 * 17956矩阵,这确实很耗时。运行非常缓慢,花了我一个多小时才解决。用于求解矩阵方程的运行时间可能为O(n ^ 3),但我从未想到过会这么慢。有什么办法可以在Python中更快地解决它?

我的代码是这样的,以解决方程式BT * UT = BT*B a的问题,其中m是测试用例的数量(在我的情况下为5000以上),B是数据矩阵m*17956,而u1*m

C = 0.005                        # hyperparameter term for regulization
I = np.identity(17956)          # 17956*17956 identity matrix
rhs = np.dot(B.T, U.T)          # (17956*m) * (m*1)     = 17956*1
lhs = np.dot(B.T, B)+C*I        # (17956*m) * (m*17956) = 17956*17956
a = np.linalg.solve(lhs, rhs)   # B.T u = B.T B a, solve for a (17956*1)

最佳答案

假设矩阵稀疏,则scipy.sparse.linalg模块将很有用。 Here是整个模块的文档,而herespsolve的文档。

关于python - 在Python中求解矩阵方程的有效方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51142844/

10-11 23:11