如何使用python查找数组中的元素列表

时间:2014-10-15 11:17:12

标签: python

我有两组数据,这两组数据的值都是一组较大数据的一部分(非结构化网格中的点)。

两个较小的数据集包含具有全局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万,并且循环太慢了。任何人都可以建议更快的方法吗?

1 个答案:

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