【发布时间】:2018-07-02 19:46:42
【问题描述】:
现在我正在使用numpy.linalg.solve 来求解我的矩阵,但是我使用它来求解 5000*17956 矩阵的事实使得它非常耗时。它运行得很慢,我花了一个多小时才解决。求解矩阵方程的运行时间可能是 O(n^3),但我从没想过会这么慢。有什么方法可以在 Python 中更快地解决它?
我的代码是这样的,求解方程BT * UT = BT*B a,其中m 是测试用例的数量(在我的情况下超过5000),B 是数据矩阵m*17956,并且u 是 1*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)
【问题讨论】:
-
我不是矩阵专家,但是为什么不能将每边乘以 B.T^-1 以去除 B.T 项?
-
求逆矩阵的计算效率很低
标签: python performance numpy matrix