Numpy 阵列内存大于预期



我有一个大约 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

最新更新