@ user2675516 Вы правы насчет кода lapack, я не нашел версию Intel, которую использует моя установка, и просто взял версию lapack, не прочитав ее.

еняю наиболее эффективный код из (Почему этот код Numba в 6 раз медленнее, чем код NumPy?) так что он может обрабатывать x1 существо (n, m)

@nb.njit(fastmath=True,parallel=True)
def euclidean_distance_square_numba_v5(x1, x2):
    res = np.empty((x1.shape[0], x2.shape[0]), dtype=x2.dtype)
    for a_idx in nb.prange(x1.shape[0]):
        for o_idx in range(x2.shape[0]):
            val = 0.
            for i_idx in range(x2.shape[1]):
                tmp = x1[a_idx, i_idx] - x2[o_idx, i_idx]
                val += tmp * tmp 
            res[a_idx, o_idx] = val 
    return res

Тем не менее, это еще не более эффективно, чем более эффективная версия numpy:

def euclidean_distance_square_einsum(x1, x2):
    return np.einsum('ij,ij->i', x1, x1)[:, np.newaxis] + np.einsum('ij,ij->i', x2, x2) - 2*np.dot(x1, x2.T)

С вводом как

a = np.zeros((1000000,512), dtype=np.float32)
b = np.zeros((100, 512), dtype=np.float32)

Время, которое я получил, составляет 2.4723422527313232 для кода numba и 0.8260958194732666 для кода numpy.

Ответы на вопрос(1)

Ваш ответ на вопрос