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

时间:2017-09-28 09:24:06

标签: python arrays numpy bigdata

我经常处理由于冗长计算而产生的numpy数组。我需要在计算中的其他地方使用它们。我现在'挑选'它们并在需要时将文件解压缩到变量中。

我注意到大数据量(~1M数据点),这很慢。我在别处读到,酸洗不是存储大文件的最佳方式。我想有效地存储和读取它们作为ASCII文件直接加载到一个numpy数组。做这个的最好方式是什么?

说我在变量'a'中有一个100k x 3的二维数组。我想将它存储在ASCII文件中并将其加载到一个numpy数组变量'b'。

3 个答案:

答案 0 :(得分:3)

如果你想要效率,那么ASCII不会是这种情况。 pickle的问题在于它依赖于python版本,所以对于长期存储来说这不是一个好主意。您可以尝试使用其他二进制技术,其中最直接的解决方案是使用numpy.save方法记录here

答案 1 :(得分:3)

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)

再次加载数据:

with open('data.txt', 'rb') as f:
    my_loaded_array = np.load(f)

答案 2 :(得分:2)

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

对于这个常见问题,有几种解决方案可以使用专门的库。

  1. 仅限Python持久性:joblib提供alternative to pickle专门用于存储太大而无法方便酸洗的文件。
  2. HDF5是一种专门用于存储阵列的文件格式。格式是多语言和多平台,但它有一个非常好的Python库:h5py
  3. h5py的示例。要写数据:

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

    阅读数据:

    import h5py
    with h5py.File('data.h5', 'r') as f:
        b = f['a'][:]