Сейчас я использую numpy.linalg.solve
для решения своей матрицы, но тот факт, что я использую ее для решения матрицы 5000 * 17956, делает ее действительно трудоемкой. Это работает очень медленно, и мне потребовалось больше часа, чтобы решить. Время выполнения для этого, вероятно, O (n ^ 3) для решения матричного уравнения, но я никогда не думал, что это будет так медленно. Есть ли способ решить это быстрее в Python?
Мой код выглядит примерно так: для решения a для уравнения 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)