您好我有以下问题。我有一个元组列表,其中每个元组由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)
太靠近了。
答案 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毫秒。