[英]Adding Euclidean distance to a matrix
我解释了我必须发展的东西。
假设我必须执行一个函数,该函数负责接收两个矩阵,它们的列数相同,但行数可以不同。
总而言之,我们将有两个向量矩阵,它们的维数相同,但元素数N不同。
我必须计算组成两个矩阵的每个向量之间的欧几里得距离,然后将其存储在另一个矩阵中,该矩阵将包含我所有向量之间的欧几里得距离。
这是我开发的代码:
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
在这种方法中,我将接收两个矩阵,以稍后创建一个矩阵,该矩阵将在矩阵x
和y
的向量之间具有欧几里得距离。
问题如下,我不知道如何向每个计算出的欧几里得距离值分配我生成的新矩阵D
的正确位置。
我的主要功能具有以下结构:
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
使用有效的方法来计算欧几里得距离。 它必须具有与D_bucle
相同的结果,该结果与D_bucle
计算的D_bucle
相同,但使用的代码效率不高,但是我没有得到应有的结果。
我认为是当我创建欧几里得矩阵D
,它做得不正确,所以计算不正确。
更新!!! 我刚刚更新了解决方案,我的问题是,首先我不知道如何将每对向量的正确欧氏向量结果分配给D矩阵,现在我知道如何分配它,但是现在的问题是,仅从第一行开始与cdist函数相比,D Matrix的结果正确
尚未完全理解您的要求,但我确实看到一个可能解释您结果的问题:
for v1 in x:
for v2 in y:
D = math.sqrt(sum([(xi-yi)**2 for xi,yi in zip(v1,v2)]))
在此循环中,每NxM次您将覆盖D的值。 完成后,D仅包含最后一个比较的距离。 您可能需要类似D [i,j] = math.sqrt(...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.