Ich habe numpy mit OpenBlas kompiliert und ich frage mich, warum einsum ist viel langsamer als Punkt (ich verstehe in den 3 Indizes Fall, aber ich verstehe nicht, warum es auch in den zwei Indizes Fall weniger leistungsfähig ist)? Hier ein Beispiel:Warum ist numpy.dot viel schneller als 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
Gibt es eine Möglichkeit einsum Verwendung OpenBlas und Parallelisierung wie numpy.dot zu lassen? Warum ruft np.einsum nicht nur np.dot auf, wenn es ein Punktprodukt bemerkt?
In Verbindung stehende: http://stackoverflow.com/questions/20149201/why-is-numpys-einsum-slower-than-numpys-built-in-functions –
Das stimmt, aber meine Frage eher mit den beiden Indizes verwandt Fall. Die Antworten in diesem Post geben mir den Eindruck, dass es Probleme mit drei Indizes gibt. Ich war überrascht, dass der Geschwindigkeitsunterschied in diesem speziellen Beispiel so beeindruckend ist. – varantir
Weil einsum geschrieben wird, um generisch zu sein, und nicht Sonderfall das zwei Indexpunktprodukt, um blas zu benutzen. Das ist wirklich das Endergebnis. Wenn Sie wissen, dass Sie nur zwei Indizes haben, verwenden Sie einfach Punkt. – BeRecursive