Skip to main content
 首页 » 编程设计

Python 2.7 大复杂度内存错误

2025年05月04日19mfrbuaa

我是 python 的新手。我正在运行以下代码,它给 python2.7 带来了内存错误。 由于我使用的是 opencv,因此我正在使用 python2.7。我已经阅读了以前的帖子,但我对它们了解不多。

s={} 
ns={} 
ts={} 
for i in range(0,256): #for red component 
    for j in range(0,256): #for green component 
        for k in range(0,256): # for blue component 
            s[(i,j,k)]=0 
            ns[(i,j,k)]=0 
            ts[(i,j,k)]=i*j*k 

请帮忙。该代码试图存储红色、绿色和蓝色分量的频率。为此,我将这些值初始化为零

请您参考如下方法:

事情 1:使用 itertools 而不是在每次循环时都构建所有 range 列表。 xrange 将返回一个迭代器对象,如 range,而 product 将返回一个从给定的可迭代对象中选择元素元组的迭代器。

事情 2:对大数据使用 numpy。这是为此类事情设计的矩阵实现。

>>> import numpy as np 
>>> from itertools import product 
>>> x=np.zeros((256,256,256)) 
>>> for i, j, k in product(xrange(256), repeat=3): 
...     x[i,j,k]= i*j*k 
...  

对我来说大约需要五秒钟,以及预期的内存量。

$ cat /proc/27240/status  
Name:   python 
State:  S (sleeping) 
... 
VmPeak:   420808 kB 
VmSize:   289732 kB 

请注意,如果您尝试分配三个 256*256*256 数组,您实际上可能会遇到系统范围的内存限制,因为每个数组都有大约 1700 万个条目。幸运的是,numpy 允许您将数组持久保存到磁盘。

你遇到过PIL (Python Imaging Library)吗? ?您可能会发现它很有帮助。