调用exec时发生Python内存错误
我是python新手,下面是我的代码调用exec时发生Python内存错误,python,arrays,memory,numpy,Python,Arrays,Memory,Numpy,我是python新手,下面是我的代码 import numpy as np val = 4**10 Q = [] for j in range(60): a = [] for i in range(val): tmp = (i+j)**2 a.append(tmp) Q.append(a) T= zip(*Q) G = [] for t in T: tmps2 = np.average(t) G.append(tmps2
import numpy as np
val = 4**10
Q = []
for j in range(60):
a = []
for i in range(val):
tmp = (i+j)**2
a.append(tmp)
Q.append(a)
T= zip(*Q)
G = []
for t in T:
tmps2 = np.average(t)
G.append(tmps2)
下面是我的代码错误:
MemoryError Traceback (most recent call last)
C:\Python27\lib\site-packages\IPython\utils\py3compat.pyc in execfile(fname, glo
b, loc)
169 else:
170 filename = fname
--> 171 exec compile(scripttext, filename, 'exec') in glob, loc
172 else:
173 def execfile(fname, *where):
C:\Users\User\Desktop\simpl.py in <module>()
13
14
---> 15 T= zip(*Q)
16
17 G = []
MemoryError:
MemoryError回溯(最近一次调用)
C:\Python27\lib\site packages\IPython\utils\py3compat.pyc在execfile(fname,glo)中
b、 loc)
169其他:
170 filename=fname
-->171 exec编译(脚本文本,文件名,'exec'),在glob,loc中
172其他:
173 def execfile(fname,*其中):
C:\Users\User\Desktop\siml.py in()
13
14
--->15 T=zip(*Q)
16
17 G=[]
记忆错误:
因此,任何专家都可以向我解释一下,我的计算机仍然有大约1.5GB的可用内存。您可以通过以下方式更有效地实现这一点:
i,j= np.indices((60, 4**10))
Q = (i+j)**2
G = np.average(Q, axis=0)
最大的优势是:
- 避免for循环
- 更高效的内存使用
在本例中,没有使用
Q
的转置,因此您可能不会得到内存错误。您可以通过以下方法更有效地实现这一点:
i,j= np.indices((60, 4**10))
Q = (i+j)**2
G = np.average(Q, axis=0)
最大的优势是:
- 避免for循环
- 更高效的内存使用
在本例中,没有使用
Q
的转置,因此您可能不会得到内存错误。i,j=np.meshgrid(np.arange(60),np.arange(4**10),index='ij',sparse=True)
相当于np.indexes并节省了一点内存。感谢您的建议,它解决了我的问题。我想知道,为什么在我的代码中它会耗尽内存,但使用np.index或np,meshgrid不会有这样的问题。此外,我的电脑还有大约1.5GB的可用内存。(I使用windows 8.1、python 2.7.6)。谢谢。@user3751276您的代码的问题是它使用列表来存储大矩阵。列表中的每个元素的长度可能超过64位,而使用索引时,每个存储的元素将获得32位。在您的版本中,存储转置的Q矩阵,并应用所需的空间。1.5GB的内存可能不足以存储所有这些内容。您正在使用Python2.7.6 64位吗?亲爱的Saullo,我正在使用Python2.7.6 32位。衷心感谢您的建议和建议。谢谢。@user3751276如果您使用64位Python,您将不会得到内存错误,因为32位版本的内存使用量限制在2GB左右,即使您的机器有更多可用的…i,j=np.meshgrid(np.arange(60),np.arange(4**10),index='ij',sparse=True)
相当于np.index,并节省了更多的内存Dar Saullo和jtaylor,感谢您的建议,它解决了我的问题。我想知道,为什么在我的代码中它会耗尽内存,但使用np.index或np,meshgrid不会有这样的问题。此外,我的电脑还有大约1.5GB的可用内存。(I使用windows 8.1、python 2.7.6)。谢谢。@user3751276您的代码的问题是它使用列表来存储大矩阵。列表中的每个元素的长度可能超过64位,而使用索引时,每个存储的元素将获得32位。在您的版本中,存储转置的Q矩阵,并应用所需的空间。1.5GB的内存可能不足以存储所有这些内容。您正在使用Python2.7.6 64位吗?亲爱的Saullo,我正在使用Python2.7.6 32位。衷心感谢您的建议和建议。谢谢。@user3751276如果您使用Python 64位,您将不会得到内存错误,因为32位版本的内存使用限制为2GB左右,即使您的计算机有更多可用内存。。。