Gegeben zwei Matrizen, ich möchte die paarweisen Unterschiede zwischen allen Zeilen berechnen. Jede Matrix hat 1000 Zeilen und 100 Spalten, so dass sie ziemlich groß sind. Ich habe versucht, eine for-Schleife und reine Rundfunkübertragung zu verwenden, aber die for-Schleife scheint schneller zu arbeiten. Mache ich etwas falsch? Hier ist der Code:Wie finden Sie die paarweisen Unterschiede zwischen Zeilen von zwei sehr großen Matrizen mit numpy?
from numpy import *
A = random.randn(1000,100)
B = random.randn(1000,100)
start = time.time()
for a in A:
sum((a - B)**2,1)
print time.time() - start
# pure broadcasting
start = time.time()
((A[:,newaxis,:] - B)**2).sum(-1)
print time.time() - start
Die Broadcasting-Methode dauert etwa 1 Sekunde länger und es ist noch länger für große Matrizen. Irgendeine Idee, wie man das mit numpy rein beschleunigt?
Ha! Ich habe Divakar zur'Einsum'-Antwort geschlagen! Natürlich scheint mir der falsche Weg zu sein, es zu benutzen, wenn Sie eine schnellere Lösung wünschen. . . –
@DanielForsman Du brauchst nur mehr Übung, du wirst es irgendwann schaffen! :) – Divakar
Wenn man bedenkt, wie viel von meinem derzeitigen Code-Stapel darauf beruht, kartesische Entfernungen schnell zu berechnen, ist dieser Algebra-Trick nützlich genug, dass es mir nicht viel ausmacht :) –