我正在处理点[(1,2),(3,4),(5,6),(7,8)]
列表。我想找到从每个点到列表中每个其他点的欧几里德距离。
然后我需要创建一个新列表来表示原始列表中的每个点,并且在新列表中我将仅添加与该点相关的距离。
到目前为止,我有:
for i in mat_ary1:
points_dist_i = []
for j in i:
row = []
x2 = [u[0] for u in i]
y2 = [u[1] for u in i]
# Calculate the distance from point j to all others
for a in x2:
dist_x_1 = pow((a - j[0]),2)
for b in y2:
dist_y_1 = pow((b - j[1]),2)
dist_xy_1 = float('{0:.2f}'.format((math.sqrt(dist_x_1 + dist_y_1))))
for item in j:
if item not in row:
row.append(dist_xy_1)
else:
continue
points_dist_i.append(row)
i
中的每个mat_ary1
代表一个点列表。使用我正在使用的循环,我似乎重复相同的计算。
我的输入似乎是在复制行:
[[6.32, 6.32], [6.32, 6.32], [0.0, 0.0], [0.0, 0.0]]
[[11.4, 11.4], [11.4, 11.4], [0.0, 0.0], [0.0, 0.0]]
[[16.49, 16.49], [16.49, 16.49], [0.0, 0.0], [0.0, 0.0]]
[[14.32, 14.32], [14.32, 14.32], [0.0, 0.0], [0.0, 0.0]]
[[13.0, 13.0], [13.0, 13.0], [0.0, 0.0], [0.0, 0.0]]
[[11.66, 11.66], [11.66, 11.66], [0.0, 0.0], [0.0, 0.0]]
答案 0 :(得分:3)
您可以使用以下嵌套列表推导
>>> import math
>>> [[math.hypot(point[0]-x, point[1]-y) for x,y in points] for point in points]
[[0.0, 2.8284271247461903, 5.656854249492381, 8.48528137423857],
[2.8284271247461903, 0.0, 2.8284271247461903, 5.656854249492381],
[5.656854249492381, 2.8284271247461903, 0.0, 2.8284271247461903],
[8.48528137423857, 5.656854249492381, 2.8284271247461903, 0.0]]
这基本上形成了一个矩阵,其中从一个点到任何其他点的距离,其中行和列索引是“从”和“到”点,在这种情况下,矩阵也将关于对角线对称,并且对角线将全部为零。
答案 1 :(得分:2)
Scikit-learn有一个针对这个问题的函数,如果你的数组很大,它可能是最快的实现。
public class AutoIncrementKey {
public static int Next(Realm realm, Class<? extends RealmModel> c)
{
if(!realm.isInTransaction()) {
throw new IllegalStateException("Realm is not in a transaction.");
}
// continue as mentioned