【问题标题】:Memory Error in Python despite having sufficient RAM尽管有足够的 RAM,Python 中的内存错误
【发布时间】:2016-01-31 17:25:51
【问题描述】:
from __future__ import division
import scipy.io 
import numpy as np
import math
from math import sin
from math import cos


mat = np.zeros((1024,1024,360 ),dtype=np.float32)                                    

x = scipy.io.loadmat('/home/prakriti/Project/A.mat')          
A = np.array((x.values()))
mat[:,:,0:120] = A[0][:,:,:]
del x
del A

y = scipy.io.loadmat('/home/prakriti/Project/B.mat')  
B = np.array((y.values()))
mat[:,:,120:240] = B[0][:,:,:]
del y
del B

z = scipy.io.loadmat('/home/prakriti/Project/C.mat')  
C = np.array((z.values()))
mat[:,:,240:360] = C[0][:,:,:]
del z
del C

s = np.linspace(0,1023,1024)
v = np.linspace(0,1023,1024)
ss,vv = np.meshgrid(s,v)
zz = ss**2 + vv**2
print zz

为此,我收到以下错误。谁能解释一下这里有什么问题?我正在尝试使用我可用的数据制作一个 3-D 矩阵垫。我有 49GB 的可用内存。为什么我还是会出现内存错误?

Traceback (most recent call last):
  File "/home/prakriti/Project/fdk_new.py", line 11, in <module>
    x = scipy.io.loadmat('/home/prakriti/Project/A.mat')
  File "/usr/lib/python2.7/dist-packages/scipy/io/matlab/mio.py", line 152, in loadmat
    matfile_dict = MR.get_variables(variable_names)
  File "/usr/lib/python2.7/dist-packages/scipy/io/matlab/mio5.py", line 270, in get_variables
    hdr, next_position = self.read_var_header()
  File "/usr/lib/python2.7/dist-packages/scipy/io/matlab/mio5.py", line 223, in read_var_header
    stream = BytesIO(dcor.decompress(data))
MemoryError

【问题讨论】:

  • A.mat的内容是什么维度和数据类型?文件有多大?

标签: python python-2.7 python-2.5


【解决方案1】:

提供答案,因为评论的格式不正确。

尽量不要创建额外的内存。 GIL 需要一些时间才能发布。

而不是:

x = scipy.io.loadmat('/home/prakriti/Project/A.mat')          
A = np.array((x.values()))
mat[:,:,0:120] = A[0][:,:,:]
del x
del A

做:

mat[:,:,0:120] = np.array((scipy.io.loadmat('/home/prakriti/Project/A.mat').values()))[0][:,:,:]

等等……

否则,我们需要更多信息。就像mat 文件的大小一样。

【讨论】:

  • 它说 ValueError: cannot set an array element with a sequence when I try to do it for more. mat[:,:,0:60] = np.array((scipy.io.loadmat('/home/prakriti/Project/A1.mat').values()))[0][:,:,: ]。我必须像这样添加其中的六个。 mat[:,:,60:120] = np.array((scipy.io.loadmat('/home/prakriti/Project/B1.mat').values()))[0][:,:,: ]
猜你喜欢
  • 1970-01-01
  • 2019-11-01
  • 2019-11-29
  • 1970-01-01
  • 1970-01-01
  • 2015-02-12
  • 2013-11-05
  • 1970-01-01
  • 2020-08-25
相关资源
最近更新 更多