我有一个数据集,有450000列和450行-都是数值。我用np.genfromtxt()
函数将数据集加载到NumPy数组中:
# The skip_header skips over the column names, which is the first row in the file
train = np.genfromtxt('train_data.csv', delimiter=',', skip_header=1)
train_labels = train[:, -1].astype(int)
train_features = train[:, :-1]
最初加载数据集时使用RAM-15GB以上的函数。但是,在该函数运行完毕后,它的RAM使用量仅为2-3GB。为什么np.genfromtxt()
最初会占用这么多内存?在
{在kasvd中提出了一个好的解决方案。这个答案中的
iter_loadtxt()
解决方案是我的问题的完美解决方案:genfromtxt()
占用这么多内存的原因是它在解析数据文件时没有将数据存储在高效的NumPy数组中,因此在NumPy解析我的大数据文件时内存使用过多。在如果您提前知道数组的大小,则可以通过在解析时将每一行加载到目标数组中来节省时间和空间。在
例如:
具有更简单的解析功能:
^{pr2}$out[i,:] = line.split(',')
将字符串列表加载到数字数据类型数组中会强制进行转换,与np.array(line..., dtype=int)
相同。在更简单、直接的解析器要快得多。在
但是,如果我尝试
loadtxt
和genfromtxt
使用的简化版本:对于这个小案子,它更快。
genfromtxt
必须有大量的解析开销。这是一个小样本,所以内存消耗并不重要。在为了完整起见,
loadtxt
:使用
fromiter
:相关问题 更多 >
编程相关推荐