2013-10-09 4 views
5

матрица по умолчанию умножения вычисляется какNumpy умножения матриц с продуктом пользовательских точек

c[i,j] = sum(a[i,k] * b[k,j]) 

Я пытаюсь использовать пользовательскую формулу вместо продукта точки, чтобы получить

c[i,j] = sum(a[i,k] == b[k,j]) 

Есть ли эффективная способ сделать это в numpy?

ответ

4

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

c = sum(a[...,np.newaxis]*b[np.newaxis,...],axis=1) # == np.dot(a,b) 

c = sum(a[...,np.newaxis]==b[np.newaxis,...],axis=1) 

Я включил newaxis в b просто дать понять, как расширяется этот массив. Существуют и другие способы добавления размеров в массивы (изменение, повтор и т. Д.), Но эффект тот же. Разверните a и b на ту же форму, что и элемент умножения элементов (или ==), а затем суммируйте правильную ось.

+0

+1 хороший, спасибо –

+0

Спасибо. Это очень аккуратно. –

Смежные вопросы