快速转换列表的方法(例如从scipy.space.KDTree.query_ball_tree)到成对数组?

2024-07-08 15:57:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力寻找一种将列表列表转换为成对数组的快速方法。对的第一个值是列表行的索引,第二个值由列表中该列表行的每个值组成。如果行是空列表,则不存在对,因此不应创建对。在

我希望得到类似于通过以下方式获得的结果:

    combarray = numpy.concatenate((t1, t2), axis=0)
    tree   = cKDTree(combarray)
    pairlist  = tree.query_pairs(r = distance )
    pairs  = numpy.array(list(pairlist))
    points = len(t1)
    check = numpy.logical_and(pairs[:,0] < points, pairs[:,1] >= points)
    validpairs = pairs[check]
    validpairs[:,1] -= points

不幸的是,两个主要原因的组合tree.query_对打电话大约需要使用t1的两倍时间tree.query_ball_树(t2tree,r=distance)由于组合的两个数组的大小。如果我能从KDTree.query球回到一对有效的阵列,那么它可能是更快的选择使用。在

t1是3d中的一组顶点,t2是3d中的一组不同的顶点。距离是建立“近”点的参数,其中一些点的顶点值相同,即我当前使用的值为0.02。这里的要点是转换列表,例如

^{pr2}$

对数组: [[1,3], [1,5], [2,1], [4,2]]

大多数行都是空的,通常只有少数几行(每行中的元素可能多达20个,但这是未知的)。每组t1和t2值可以是3到大约3000个值。在


Tags: numpytree列表check数组querypointsdistance
1条回答
网友
1楼 · 发布于 2024-07-08 15:57:53
data = [
[],
[3,5],
[1]
]

pairs = []
for row_idx, row in enumerate(data):
    for item in row:
        pairs.append((row_idx, item))

print pairs

结果:

^{pr2}$

或者,这一个衬垫将产生相同的输出:

^{3}$

相关问题 更多 >

    热门问题