计算高矩阵(列表列表)中行的出现次数?

时间:2017-07-21 12:31:44

标签: python

我有一个高(3,000,000乘2)矩阵,表示为列表列表(一个包含300万个元素的列表,每个列表包含两个元素),我需要计算每对列表的显示次数行(有可能的对数有限,大约5000)。这是我到目前为止所做的,但效率很低:

for a in list1:
    for b in list2:
        count_here = tall_matrix.count([a,b])

关于如何更快地提出这个想法?

非常感谢!

2 个答案:

答案 0 :(得分:1)

使用collections.Counter这很简单。由于您的列表包含子列表,并且子列表不可清除,因此您需要先将它们转换为元组:

In [280]: x = [[1, 2], [1, 2], [3, 4], [4, 5], [5, 6], [4, 5]]

In [282]: c = collections.Counter(map(tuple, x))

In [283]: c
Out[283]: Counter({(1, 2): 2, (3, 4): 1, (4, 5): 2, (5, 6): 1})

c存储列表中每一对的计数。

答案 1 :(得分:0)

计数器应该可以解决问题:

测试性能(使用IPython):

In [1]: import random
In [2]: a=[(random.randint(0, 10), random.randint(0, 10)) for i in range(3000000)]
In [3]: from collections import Counter
In [4]: %time c = Counter(a)
CPU times: user 940 ms, sys: 52 ms, total: 992 ms
Wall time: 891 ms