numpy无法调整大矩阵的大小

时间:2017-05-10 07:43:38

标签: python numpy out-of-memory openpyxl

我使用openpyxlnumpy来阅读大型Excel文件。代码看起来像

W = load_workbook(fname, read_only = True)
p = W.worksheets[0]
a=[]
m = p.max_row
n = p.max_column
for row in p.iter_rows():
    for k in row:
        a.append(k.value)

# convert list a to matrix (for example 5*6)
aa= np.resize(a, [m, n])

对于中等大小的文件(4MB excel文件,16000行和50列),它们工作正常。但是对于大文件(21B,包含100000行和50列),numpy会因内存错误而失败。系统上有内存。

1-如何在调整矩阵大小时找到需要多少内存?

2-如何增加内存(如java中的堆大小)?

Traceback (most recent call last):
  File "exread.py", line 26, in <module>
    aa= np.resize(a, [m, n])
  File "C:\Users\m.naderan\AppData\Local\Programs\Python\Python36\lib\site-packa
ges\numpy\core\fromnumeric.py", line 1121, in resize
    a = ravel(a)
  File "C:\Users\m.naderan\AppData\Local\Programs\Python\Python36\lib\site-packages\numpy\core\fromnumeric.py", line 1468, in ravel
    return asanyarray(a).ravel(order=order)
  File "C:\Users\m.naderan\AppData\Local\Programs\Python\Python36\lib\site-packages\numpy\core\numeric.py", line 583, in asanyarray
    return array(a, dtype, copy=False, order=order, subok=True)
MemoryError

2 个答案:

答案 0 :(得分:0)

  1. 检查操作内存使用情况的最实用的方法可能是在Unix系统上观看top / htop。有人在5年前发布了一篇Python solution

  2. 我可能错了,但我认为默认情况下对Python内核的内存使用没有限制,即MemoryError只有当真的不够时才会发生整个系统上的可用内存(我之前运行的内存占用超过50GB的内存)。

答案 1 :(得分:0)

文档包含clear example of how to convert a worksheet to a dataframe。这比你自己的代码更容易使用和更可靠,所以为什么不使用它呢?