Python 2.7内存错误,大复杂性

Jan*_*ora 1 python dictionary

我是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
Run Code Online (Sandbox Code Playgroud)

请帮忙.代码尝试存储红色,绿色和蓝色组件的频率.为此,我将这些值初始化为零

Kat*_*iel 5

事1:使用itertools而不是range每次循环构建所有列表.xrange将返回一个迭代器对象range,并product返回一个迭代器,选择给定iterable中元素的元组.

事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
... 
Run Code Online (Sandbox Code Playgroud)

我需要大约五秒钟,以及预期的内存量.

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

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

您是否遇到过PIL(Python Imaging Library)?你会发现它很有用.