【发布时间】:2018-05-11 06:59:17
【问题描述】:
我解释我必须开发什么。
假设我必须执行一个函数,负责接收两个矩阵,这两个矩阵具有相同的列数,但行数可以不同。
总而言之,我们将有两个向量矩阵,它们具有相同的维度但元素个数 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 时没有正确执行,然后计算不正确。
更新!!! 我刚刚更新了我的解决方案,我的问题是首先我不知道如何将每对向量的正确欧几里德向量结果分配给 D 矩阵, 现在我知道如何分配它,但现在我的问题是,与 cdist 函数相比,只有 D Matrix 的第一行具有正确的结果
【问题讨论】:
-
有点跑题,但我建议你使用
math.hypot()来计算距离值。 -
您正在计算
nxm距离?