我是 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)吗? ?您可能会发现它很有帮助。
