我有一个由一组数据点x:
生成的numpy压缩距离矩阵dists = scipy.spatial.distance.pdist(x)
对于数据点i和j之间的距离(假设i 然后,我可以通过以下方式获得点i和j之间的距离: 对于单一距离,这是微不足道的。但是,我无法找到一种快速/有效的方法来获取涉及数据点i的所有距离的所有距离。这就是我目前所拥有的: 更新:看起来效率低下来自“condensed_inx”lambda函数。 condensed_inx = lambda i,j,n: i*n + j - i*(i+1)/2 - i - 1 # n is the number of data points
dists[condensed_inx(i, j, n)]
n = n = scipy.spatial.distance.num_obs_y(dists) #Get number of data points from condensed matrix
for i in range(n):
#Get all distance indices relative to data point i
inx = []
for j in range(n):
if i < j:
inx.append(condensed_inx(i, j, n))
elif i > j:
inx.append(condensed_inx(j, i, n))
else:
continue
#Get distances relative to data point i
distance_for_i = dists[np.array(inx, dtype=np.uint64)]
#Do some calculations with the distances_for_i
#For example
print np.mean(distance_for_i)
答案 0 :(得分:2)
除非你正在处理非常大的数组,否则你可能最好使用squareform
构建方形距离矩阵,然后对每一行进行处理。例如,您的平均示例变为
dists = scipy.spatial.distance.pdist(x)
square = scipy.spatial.distance.squareform(dists)
print square.mean(axis=1)