我有两组数据,这两组数据的值都是一组较大数据的一部分(非结构化网格中的点)。
两个较小的数据集包含具有全局id的向量,该id引用较大数据集中的点。类似的东西:
大量数据:
0 0 0
0 0 1
0 1 0
1 0 0
1 1 0
1 0 1
0 1 1
1 1 1
较小的数据集:
A
0 1
3 5
4 5
6 7
7 2
乙
0 10
4 12
7 60
较小数据集中的第一列是对较大数据集中行号的引用。较小数据集中的第二列只是示例数据。
值得一提的是,B的第一列始终是A的第一列的子集。
我需要的是A的行索引,其中点ID与B中的那些匹配。
在这种情况下,这将是:
ind = [0,2,4]
即。 A [ind,0] = B [:,0]
我之前已经设法使用循环,但现在数据集的大小增加到超过1000万,并且循环太慢了。任何人都可以建议更快的方法吗?
答案 0 :(得分:1)
将B的第一列数据放入集合中可以加快速度。 假设A和B是元组(或列表)的列表,请尝试:
>>> A
[('0', '1'), ('3', '5'), ('4', '5'), ('6', '7'), ('7', '2')]
>>> B
[('0', '10'), ('4', '12'), ('7', '60')]
>>> bkeys=set([i[0] for i in B])
>>> [i for i,v in enumerate(A) if v[0] in bkeys]
[0, 2, 4]