Ho numpy compilato con OpenBlas e mi chiedo perché einsum sia molto più lento del punto (capisco nel caso dei 3 indici, ma non capisco perché sia anche meno performante nel caso dei due indici)? Ecco un esempio:Perché numpy.dot è molto più veloce di numpy.einsum?
import numpy as np
A = np.random.random([1000,1000])
B = np.random.random([1000,1000])
%timeit np.dot(A,B)
Out: 10 loops, best of 3: 26.3 ms per loop
%timeit np.einsum("ij,jk",A,B)
Out: 5 loops, best of 3: 477 ms per loop
C'è un modo per far OpenBlas uso einsum e parallelizzazione come numpy.dot? Perché np.einsum non chiama semplicemente np.dot se nota un prodotto con punti?
Correlato: http://stackoverflow.com/questions/20149201/why-is-numpys-einsum-slower-than-numpys-built-in-functions –
Questo è vero, ma la mia domanda è piuttosto correlata ai due indici Astuccio. Le risposte nel post specificato mi danno l'impressione che ci siano problemi con tre indici. Sono stato sorpreso che la differenza di velocità in questo specifico esemplare sia così impressionante. – varantir
Poiché l'einsum è scritto per essere generico e non è un caso speciale, il prodotto con due punti indice è usato da blas. Questa è davvero la linea di fondo. Se sai che hai solo due indici, usa il punto. – BeRecursive