Векторизуйте уравнение `A[x, y] = A[x, y]/sqrt(A[x, x] * A[x, y])`, чтобы сократить время вычислений.Python

Программы на Python
Гость
Векторизуйте уравнение `A[x, y] = A[x, y]/sqrt(A[x, x] * A[x, y])`, чтобы сократить время вычислений.

Сообщение Гость »


Имея матрицу симметрии A формы N x N, я хочу выполнить преобразование A[x, y] = A[x, y] / sqrt(A[x, x] * A[x, y]) для создания новой матрицы. На данный момент приведенный ниже фрагмент является моей реализацией.

def gen_new_mat(mat: np.ndarray): new_mat = np.copy(mat) для меня в диапазоне (new_mat.shape[0]): для j в диапазоне (i + 1, new_mat.shape[0]): альфа = np.sqrt(new_mat[i, i] * new_mat[j, j]) new_mat[i, j] /= альфа новый_мат[j, я] = новый_мат[i, j] вернуть новый_мат Это работает правильно. Однако он вычисляет очень медленно (~12 секунд, когда N ≈ 3800).

Как я могу ускорить этот процесс, используя некоторые библиотеки, предназначенные для задач, связанных с матрицами (например, numpy)? Я могу только думать об этом, но любые другие подходы очень ценятся. Спасибо вам огромное!!

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