numpy数组内存大于预期

时间:2018-06-12 22:18:31

标签: python arrays numpy memory

我有一个大约16GB的文件bad_orders.csv被读入58GB RAM机器内的numpy数组。

ubuntu@ip-172-31-22-232:~/Data/Autoencoder_Signin/joined_signin_rel$ free -g
          total        used        free      shared  buff/cache   available
Mem:             58           0          58           0           0          58
Swap:             0           0           0

当我运行以下命令时,作业已被反复杀死:

import numpy as np
arr = np.genfromtxt('bad_orders.csv', delimiter =',', missing_values='',dtype='float32')

终端显示它正在使用不成比例的内存:

ubuntu@ip-172-31-22-232:~$ free -g
          total        used        free      shared  buff/cache   available
Mem:             58          42          12           0           3          16
Swap:             0           0           0

然后我尝试从原始文件中抽取10000行并检查内存使用情况:

In [7]: samples = np.genfromtxt('samples.csv',delimiter=',', 
missing_values='', dtype='float32')

In [8]: samples.nbytes
Out[8]: 16680000

示例numpy数组显示大小为0.017GB。我的文件总共有~8M行,所以如果内存使用量线性扩展,那么大numpy数组应该占用13GB内存。当我阅读整个文件时,为什么它需要超过50GB?

1 个答案:

答案 0 :(得分:0)

genfromtxt有很多类型检查,仅适用于小文件。对于较大的文件,最好使用loadtxt,但仍然使用的内存比提到的here文件要多得多。 另一种更好的方法是使用pandas'read_csv