Python:使用for循环创建浮动的嵌套列表

时间:2016-08-29 19:58:25

标签: python loops

我正在处理点[(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]]

2 个答案:

答案 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