NumPy Broadcasting: вычисление суммы квадратов различий между двумя массивами

У меня есть следующий код. Это происходит навсегда в Python. Должен быть способ перевести этот расчет в эфир …

def euclidean_square(a,b): squares = np.zeros((a.shape[0],b.shape[0])) for i in range(squares.shape[0]): for j in range(squares.shape[1]): diff = a[i,:] - b[j,:] sqr = diff**2.0 squares[i,j] = np.sum(sqr) return squares 

One Solution collect form web for “NumPy Broadcasting: вычисление суммы квадратов различий между двумя массивами”

Вы можете использовать np.einsum после вычисления различий в broadcasted way , например:

 ab = a[:,None,:] - b out = np.einsum('ijk,ijk->ij',ab,ab) 

Или используйте scipy's cdist с дополнительным параметром метрики, установленным как 'sqeuclidean' чтобы дать нам квадрат эвклидовых расстояний по мере необходимости для нашей проблемы, например,

 from scipy.spatial.distance import cdist out = cdist(a,b,'sqeuclidean') 
  • 2D Numpy Array Fancy Indexing + Masking
  • Что происходит за этим типом выбора?
  • Используйте numpy.frompyfunc для добавления трансляции в функцию python с аргументом
  • Каковы правила сравнения массивов numpy с использованием ==?
  • Python - лучший язык программирования в мире.