我有一个大约 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?
genfromtxt
有很多类型检查,仅适用于小文件。对于较大的文件,最好使用loadtxt
,尽管仍然使用比此处提到的文件更多的内存。 另一种更好的方法是使用熊猫的read_csv
。