繁体   English   中英

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

[英]best way to store numpy arrays in ascii files

由于冗长的计算,我经常处理numpy数组。 我需要在计算的其他地方使用它们。 目前,我可以“修补”它们,并在需要时将其解钉为变量。

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

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

如果要提高效率,则不是ASCII。 pickle的问题在于它依赖于python版本,因此长期存储不是一个好主意。 您可以尝试使用其他二进制技术,其中最直接的解决方案是使用此处记录的numpy.save方法。

Numpy具有一系列输入和输出方法 ,可以完全满足您的需求。

一种选择是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)

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

专用库提供了一些解决此常见问题的解决方案。

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

以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'][:]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM