Существует ли численно оптимальный порядок умножения матриц?Python

Программы на Python
Ответить
Anonymous
 Существует ли численно оптимальный порядок умножения матриц?

Сообщение Anonymous »

TL;DR: Вопрос в умножении ТОЧНОСТЬ
Мне нужно перемножить матрицы 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)
где X — матрица размером 27x1 из 27 (возможно, коррелированных) случайных величин неизвестного распределения, cov = лямбда X, k: np.dot(X.T, X) + k * np.eye(X.shape[1]), а k — неотрицательная константа, минимизирующая выражение:

Код: Выделить всё

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))
Функция drop() определяется как лямбда X, i: np.delete(X, i, axis=1).Еще более особый случай
Можно предположить, что np.cov(B.T, B) является ковариационной матрицей X, которая следует многомерному распределению Гаусса.

Подробнее здесь: https://stackoverflow.com/questions/569 ... iplication
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»