我有一个大约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?
答案 0 :(得分:0)
genfromtxt
有很多类型检查,仅适用于小文件。对于较大的文件,最好使用loadtxt
,但仍然使用的内存比提到的here文件要多得多。
另一种更好的方法是使用pandas'read_csv
。