Ich erkläre, was ich zu entwickeln habe.Euklidischen Abstand zu einer Matrix hinzufügen
Nehmen wir an, ich muss eine Funktion ausführen, die für den Empfang von zwei Matrizen verantwortlich ist, die die gleiche Anzahl von Spalten haben, sich aber in der Anzahl der Zeilen unterscheiden können.
Zusammenfassend werden wir zwei Matrizen von Vektoren mit der gleichen Dimension aber unterschiedlicher Anzahl N von Elementen haben.
Ich muss den euklidischen Abstand zwischen jedem der Vektoren, die meine zwei Matrizen bilden, berechnen und dann in einer anderen Matrix speichern, die den euklidischen Abstand zwischen all meinen Vektoren enthält.
Dies ist der Code, den ich entwickelt haben:
def compute_distances(x, y):
# Dimension:
N, d = x.shape
M, d_ = y.shape
# The dimension should be the same
if d != d_:
print "Dimensiones de x e y no coinciden, no puedo calcular las distancias..."
return None
# Calculate distance with loops:
D = np.zeros((N, M))
i = 0
j = 0
for v1 in x:
for v2 in y:
if(j != M):
D[i,j] = math.sqrt(sum([(xi-yi)**2 for xi,yi in zip(v1,v2)]))
#print "[",i,",",j,"]"
j = j + 1
else:
j = 0
i = i + 1;
print D
In diesem Verfahren die beiden Matrizen Ich erhalte später eine Matrix zu erstellen, die die euklidischen Abstände zwischen den Vektoren meiner Matrizen x
und y
haben.
Das Problem ist das Folgende, ich weiß nicht wie, zu jedem der berechneten euklidischen Abstandswerte muss ich die korrekte Position der neuen Matrix D
zuweisen, die ich erzeugt habe.
Meine Hauptfunktion hat die folgende Struktur:
n = 1000
m = 700
d = 10
x = np.random.randn(n, d)
y = np.random.randn(m, d)
print "x shape =", x.shape
print "y shape =", y.shape
D_bucle = da.compute_distances(x, y)
D_cdist = cdist(x, y)
print np.max(np.abs(D_cdist - D_bucle))
B_cdist
berechnet die euklidische Distanz effiziente Methoden. Es muss das gleiche Ergebnis wie D_bucle
haben, das das gleiche wie das andere aber mit nicht effizientem Code berechnet, aber ich bekomme nicht, was das Ergebnis sein sollte.
Ich denke, es ist, wenn ich meine Euklidische Matrix erstellen, die es nicht richtig macht, dann sind die Berechnungen falsch.
Aktualisiert !!! Ich habe gerade meine Lösung aktualisiert, mein Problem ist, dass ich zuerst nicht wusste, wie man der D-Matrix mein korrektes euklidisches Vektorergebnis für jedes Vektorenpaar zuordnet, Jetzt weiß ich, wie man es anordnet, aber jetzt ist mein Problem nur das erste Linie von D-Matrix ist ein korrektes Ergebnis im Vergleich zu cdist Funktion
Ich nehme an, du verwendest ['math.hypot()'] (https: //docs.python. org/3/library/math.html # math.hypot) um die Entfernungswerte zu berechnen – martineau
Sie berechnen 'n' x 'm' Abstände? – wwii
[Numpy Broadcast zur Durchführung euklidischer Distanz vektorisiert] (https: // stackoverflow. com/q/27948363/2823755) – wwii