Python:过滤坐标列表

时间:2017-04-20 12:32:42

标签: python numpy scipy distance

您好我有以下问题。我有一个元组列表,其中每个元组由3D坐标组成。每个坐标都在另一个时间步。他们真的很亲密。是否有可能对列表进行组合/过滤,以便只有坐标例如距离为1?。所以例如我有

list1=[(x1,y1,z1),(x2,y2,z2),(x3,y3,z3),(x4,y4,z4),(x5,y5,z5),(x6,y6,z6) 

并且过滤器将产生

list2=[(x1,y1,z1),(x3,y3,z3),(x4,y4,z4),(x6,y6,z6)], 

因为(x1,y1,z1),(x2,y2,z2)(x4,y4,z4),(x5,y5,z5)太靠近了。

1 个答案:

答案 0 :(得分:1)

由于矢量集的大小很小(<100),因此可以使用简单的解决方案。以下代码选择集合中的代表,只要它们不接近已选择的现有代表。这段代码在性能方面很幼稚,而且对元组的顺序很敏感。根据问题评论,它可能适合这个问题:

import numpy as np
from scipy.spatial.distance import euclidean

def predicate(representatives, vector):
    return all(euclidean(representative, vector) >= 1
               for representative in representatives)



def main():
    vectors = [tuple(l) for l in np.random.random_integers(0, 5, (100, 3))]

    representatives = set()
    for vector in vectors:
        if predicate(representatives, vector):
            representatives.add(vector)

在我的机器上(i5带有6GB)需要大约100毫秒。