Конечно, вам нужно перебирать каждую запись, по крайней мере, внутри. Для квадратных матриц:
K / np.sqrt(np.einsum('ii,jj->ij', K, K))
Если матрица не квадратная, сначала необходимо определить, что должно заменить «пропущенные» значения K[i,i]
, где i > j
et c.
Альтернатива: используйте numba
, чтобы оставить свой l oop как есть, получить бесплатное ускорение и даже избежать промежуточного распределения:
@njit
def normalize(K):
M = np.empty_like(K)
m, n = K.shape
for i in range(m):
Kii = K[i,i]
for j in range(n):
Kjj = K[j,j]
M[i,j] = K[i,j] / np.sqrt(Kii * Kjj)
return M