2017-08-23 3 views
1

Je veux faire une série de produits scalaires. A savoirSommation rapide en Python

for i in range(N[0]): 
    for j in range(N[1]): 
    kr[i,j] = dot(k[i,j,:], r[i,j,:]) 

Existe-t-il un moyen vectorisé pour ce faire, par exemple en utilisant einsum ou tensordot?

Répondre

1

En supposant k et r ont trois dimensions, c'est le même que:

kr = numpy.sum(k * r, axis=-1) 
5

En supposant N[0] et N[1] sont les longueurs des deux premières dimensions de k et r,

kr = numpy.einsum('...i,...i->...', k, r) 

Nous précisons ... pour permettre la diffusion, et d'effectuer un produit scalaire le long du dernier axe.

+0

Wow, beaucoup voodoo! – kindall