Мне нужно перемножить матрицы A (100x8000), B (8000x27) и C (27x1).
Поскольку матрицы B и C постоянны, а A — переменная, я предпочитаю рассчитать его как: ABC = np.dot(A, np.dot(B, C)). Однако мне интересно, что это может быть численно хуже (с точки зрения точности), чем np.dot(np.dot(A, B), C) .
Что может быть важно: матрицы A и B содержат 8000 выборок (соответственно) 100 и 27 коррелирующих признаков.
Есть ли численно оптимальный (с точки зрения точности) порядок умножения? Если да, то как я могу это определить?
Особый случай
Можно предположить, что и A, и B матрицы неотрицательны.
Более того:
Код: Выделить всё
C = np.linalg.solve(cov(B, k), X)
Код: Выделить всё
sum((X[i, 0] - np.dot(np.dot(B[:, [i]].T, drop(B, i)),
np.linalg.solve(cov(drop(B, i), k),
np.delete(X, i, axis=0))) **2
for i in range(27))
Можно предположить, что np.cov(B.T, B) является ковариационной матрицей X, которая следует многомерному распределению Гаусса.
Подробнее здесь: https://stackoverflow.com/questions/569 ... iplication
Мобильная версия