在ascii文件中存储numpy数组的最佳方法

2024-04-26 21:49:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我经常处理numpy数组,这些数组是长时间计算的结果。我需要在其他地方用它们来计算。我现在“pickle”它们,并在需要时将文件解压成变量。在

我注意到对于大数据量(~1M数据点),这是很慢的。我在其他地方读到,酸洗并不是存储大文件的最佳方式。我想将它们作为ASCII文件有效地存储和读取,以便直接加载到numpy数组中。最好的办法是什么?在

假设我在变量'a'中有一个100k×32d数组。我想将它存储在一个ASCII文件中,并将其加载到numpy数组变量'b'中。在


Tags: 文件数据numpy地方方式ascii数组pickle
3条回答

如果你想要效率,ASCII就不是这样了。pickle的问题在于它依赖于python版本,因此对于长期存储来说不是一个好主意。您可以尝试使用其他二进制技术,其中最简单的解决方案是使用文档中的numpy.save方法here。在

Numpy有一个input and output methods的范围,它将完全满足您的需求。在

一个选项是numpy.save

import numpy as np

my_array = np.array([1,2,3,4])
with open('data.txt', 'wb') as f:
    np.save(f, my_array, allow_pickle=False)

再次加载数据:

^{pr2}$

您提出的问题与数据集的大小直接相关。在

对于这个非常常见的问题,有几种解决方法,这些方法都是由专门的库提供的。在

  1. 仅限于Python的持久性:joblib提供了一个alternative to pickle,专门用于存储太大而不便于进行pickle的文件。在
  2. HDF5是一种专门用于存储阵列的文件格式。这种格式是多语言和多平台的,但是有一个非常好的Python库:h5py

h5py的一个例子。写入数据:

import h5py
with h5py.File('data.h5', 'w') as f:
    f.create_dataset('a', data=a)

读取数据:

^{pr2}$

相关问题 更多 >