Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将计数器扩展到庞大的列表?(Python)_Python_Counter_Intersection_Large Data - Fatal编程技术网

将计数器扩展到庞大的列表?(Python)

将计数器扩展到庞大的列表?(Python),python,counter,intersection,large-data,Python,Counter,Intersection,Large Data,我试图找到两个数组的交叉点的长度,用重数计算(即,如果同一个元素在一个数组中被发现3次,在另一个数组中被发现5次,我希望它被精确计算三次)。以下是我使用的代码: intrs = Counter(t1) & Counter(t2) count = sum(intrs.values()) 不幸的是,当列表太大时(例如,每个对象有8M个),此代码返回MemoryError。有没有办法使算法适用于大型列表?我认为在这种情况下,您应该使用numpy。当使用大规模列表时,这是一个很棒的库。它有一个

我试图找到两个数组的交叉点的长度,用重数计算(即,如果同一个元素在一个数组中被发现3次,在另一个数组中被发现5次,我希望它被精确计算三次)。以下是我使用的代码:

intrs = Counter(t1) & Counter(t2)
count = sum(intrs.values())

不幸的是,当列表太大时(例如,每个对象有8M个),此代码返回MemoryError。有没有办法使算法适用于大型列表?

我认为在这种情况下,您应该使用numpy。当使用大规模列表时,这是一个很棒的库。它有一个内置的、类似数组的对象,您可以很好地操纵它。numpy不会解决内存错误(至少在一般情况下)。。。由于numpy数组需要连续内存,因此它们实际上比普通python列表和字典更难分配内存。内存错误是否仅在您构建计数器或实际构建列表时才会发生?数据库就是您要用于此类问题的…@JoranBeasley:sys.getsizeof的快速测试(dict.fromkeys(范围(8*10**6))说是的,我低估了dict的每项开销。我没有考虑负载因子和缓存哈希。这里创建的3个计数器在64位系统上加在一起可能超过1 GB,不计算元素大小(因为这些成本已经发生)。