numpy.lib.format

二进制序列化

NPY格式

一种简单的格式,用于将numpy数组保存到磁盘,其中包含有关它们的完整信息。

这个 .npy 格式是以numpy为单位的标准二进制文件格式,用于保存 单一的 磁盘上任意的numpy数组。格式存储了正确重建阵列所需的所有形状和数据类型信息,即使在另一台具有不同体系结构的计算机上也是如此。该格式设计为尽可能简单,同时实现其有限的目标。

这个 .npz 格式是用于持久化的标准格式 倍数 磁盘上的numpy数组。一 .npz 文件是包含多个 .npy 文件,每个数组一个。

能力

  • 可以表示所有numpy数组,包括嵌套的记录数组和对象数组。

  • 以其本机二进制形式表示数据。

  • 直接支持Fortran连续数组。

  • 存储重建阵列所需的所有信息,包括形状和数据类型,这些信息位于具有不同体系结构的计算机上。支持小endian和大endian数组,在任何读取该文件的计算机上,具有小endian数字的文件都将生成小endian数组。这些类型是根据它们的实际大小来描述的。例如,如果具有64位c“long int”的机器写出了具有“long int”的数组,则具有32位c“long int”的读取机器将生成具有64位整数的数组。

  • 直接进行逆向工程。数据集通常比创建它们的程序寿命长。一个有能力的开发人员应该能够用他们喜欢的编程语言创建一个解决方案来阅读 .npy 没有太多文档的文件。

  • 允许数据的内存映射。见 open_memmep .

  • 可以从类似文件的流对象而不是实际文件中读取。

  • 存储对象数组,即包含任意python对象元素的数组。带有对象数组的文件不可管理,但可以读写到磁盘上。

局限性

  • numpy.ndarray的任意子类没有完全保留。子类将被接受写入,但只写出数组数据。读取文件时将创建常规numpy.ndarray对象。

警告

由于结构化数据类型解释的局限性,具有空名称字段的数据类型的名称将被“f0”、“f1”等替换。这样的数组不会完全准确地遍历格式。数据是完整的;只有字段名不同。我们正在努力解决这个问题。此修复不需要更改文件格式。具有这种结构的数组仍然可以保存和还原,并且可以使用 loadedarray.view(correct_dtype) 方法。

文件扩展名

我们建议使用 .npy.npz 以这种格式保存的文件的扩展名。这决不是一项要求;应用程序可能希望使用这些文件格式,但使用特定于应用程序的扩展名。但是,如果没有明显的替代方案,我们建议使用 .npy.npz .

版本编号

这些格式的版本编号独立于numpy版本编号。如果格式已升级,则 numpy.io 仍能读写1.0版文件。

格式化版本1.0

前6个字节是一个神奇的字符串:完全正确 \x93NUMPY .

下一个1字节是无符号字节:文件格式的主要版本号,例如 \x01 .

下一个1字节是无符号字节:文件格式的次要版本号,例如。 \x00 . 注意:文件格式的版本与numpy包的版本无关。

接下来的2个字节组成一个小的endian无符号短整型:头数据头的长度。

下一个头段长度字节构成描述数组格式的头段数据。它是一个包含字典的python文本表达式的ascii字符串。它被换行符终止 (\n )用空格填充 (\x20 )合计 len(magic string) + 2 + len(length) + HEADER_LEN 为了对齐的目的,可以被64整除。

字典包含三个键:

“德克思”dtype.descr

可以作为参数传递给 numpy.dtype 用于创建数组的dtype的构造函数。

"fortran_order"布尔

数组数据是否是Fortran连续的。由于fortran连续数组是一种常见的非C-连续形式,因此我们允许将它们直接写入磁盘以提高效率。

“形”整数元组

数组的形状。

为了重复性和可读性,字典键按字母顺序排序。这只是为了方便。如果可能的话,作者应该实现这一点。读者不能依赖于此。

在头后面是数组数据。如果dtype包含python对象(即 dtype.hasobject is True ,则数据是数组的python pickle。否则,数据是连续的(C-或Fortran-,具体取决于 fortran_order )数组的字节。消费者可以通过乘以形状给出的元素数来计算字节数(注意 shape=() 表示有1个元素)通过 dtype.itemsize .

格式版本2.0

版本1.0格式只允许数组头的总大小为65535字节。具有大量列的结构化数组可能会超过此值。版本2.0格式将头大小扩展到4 Gib。 numpy.save 如果数据需要,将自动以2.0格式保存,否则将始终使用更兼容的1.0格式。

因此,头的第四个元素的描述变为:“接下来的4个字节组成一个小的endian unsigned int:头数据头的长度”。

格式版本3.0

这个版本用utf8编码的字符串替换ASCII字符串(实际上是latin1),因此支持带有任何unicode字段名的结构化类型。

笔记

这个 .npy 格式,包括创建它的动机和备选方案的比较,在 "npy-format" NEP 然而,细节随着时间的推移而不断发展,而且本文档更为最新。

功能

descr_to_dtype \(说明)

返回基于给定描述的数据类型。

dtype_to_descr (dType)

从数据类型获取可序列化的描述符。

header_data_from_array_1_0 \(数组)

从numpy.ndarray公司.

magic (大调,小调)

返回给定文件格式版本的魔术字符串。

open_memmap (文件名) [, mode, dtype, shape, ...] )

以内存映射数组的形式打开.npy文件。

read_array \(fp)[, allow_pickle, pickle_kwargs] )

从NPY文件读取数组。

read_array_header_1_0 \(fp)

使用1.0文件格式版本从类似文件的对象读取数组头。

read_array_header_2_0 \(fp)

使用2.0文件格式版本从类似文件的对象读取数组头。

read_magic \(fp)

读取魔法字符串以获取文件格式的版本。

write_array \(fp,数组[, version, ...] )

将数组写入NPY文件,包括头。

write_array_header_1_0 \(fp,d)

使用1.0格式写入数组的标头。

write_array_header_2_0 \(fp,d)

使用2.0格式写入数组的头。