Самый быстрый способ вычисления результирующей матрицы numpy

#python #numpy #matrix

Вопрос:

Учитывая 2-мерный массив чисел X размерности [m,m] и 1-мерный массив Y длины m, я хочу рассчитать результирующую 2-мерную матрицу P также размерности [m, m], элемент которой [i, j] получается с помощью следующей операции:

 P[i][j] = Y[i] * Y[j] * np.dot(X[i],X[j]) 
 

Есть ли более быстрый способ, чем применение вложенного цикла for?

Ответ №1:

Вы можете использовать:

 P = Y*Y[:, None]*np.dot(X, X.T)
 

пример:

 >>> X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>> Y = np.array([10, 11, 12])
>>> P = Y*Y[:, None]*np.dot(X, X.T)
>>> P
array([[ 1400,  3520,  6000],
       [ 3520,  9317, 16104],
       [ 6000, 16104, 27936]])