NumPy二进制文件读写教程:.npy/.npz文件与压缩方法

365平台被黑 📅 2026-11-09 08:21:16 👤 admin 👁️ 6020 ❤️ 901
NumPy二进制文件读写教程:.npy/.npz文件与压缩方法

NumPy二进制文件读写教程:.npy/.npz文件与压缩方法

引言

NumPy是Python中用于科学计算的核心库,它提供了高效的数组操作和文件处理功能。在数据处理中,经常需要将数组保存到文件中以便后续使用。NumPy支持多种文件格式,其中二进制文件格式如.npy和.npz是最常用的,因为它们存储效率高且加载速度快。本教程将深入讲解这些二进制文件的读写方法,包括压缩选项,适合NumPy初学者学习。

.npy文件读写:单个数组

.npy文件是NumPy专为单个数组设计的二进制格式。它保存了数组的形状、数据类型等信息,确保数据完整无损。

保存数组为.npy文件

使用numpy.save()函数可以将单个数组保存为.npy文件。语法如下:

numpy.save(file, arr, allow_pickle=True, fix_imports=True)

file: 文件名或文件对象(可以是带.npy扩展名的字符串)。

arr: 要保存的NumPy数组。

其他参数通常使用默认值即可。

示例代码:

import numpy as np

# 创建一个示例数组

arr = np.array([1, 2, 3, 4, 5])

# 保存为.npy文件

np.save('my_array.npy', arr)

print("数组已保存为my_array.npy")

从.npy文件加载数组

使用numpy.load()函数可以从.npy文件加载数组。语法如下:

numpy.load(file, mmap_mode=None, allow_pickle=True, fix_imports=True, encoding='ASCII')

file: 文件名或文件对象。

加载后直接返回数组。

示例代码:

import numpy as np

# 加载.npy文件

loaded_arr = np.load('my_array.npy')

print("加载的数组:", loaded_arr)

print("数据类型:", loaded_arr.dtype)

print("形状:", loaded_arr.shape)

.npz文件读写:多个数组

.npz文件是NumPy用于保存多个数组的压缩格式。它实际上是多个.npy文件的归档,方便存储和传输多个数据对象。

保存多个数组为.npz文件

使用numpy.savez()或numpy.savez_compressed()函数。

numpy.savez(file, *args, **kwds): 保存多个数组,可以是位置参数或关键字参数。

numpy.savez_compressed(file, *args, **kwds): 同上,但启用压缩以减小文件大小。

示例代码:使用numpy.savez()

import numpy as np

# 创建多个数组

arr1 = np.array([1, 2, 3])

arr2 = np.array([[4, 5], [6, 7]])

# 保存为.npz文件

np.savez('my_arrays.npz', array1=arr1, array2=arr2) # 使用关键字参数

# 或使用位置参数:np.savez('my_arrays.npz', arr1, arr2)

print("多个数组已保存为my_arrays.npz")

示例代码:使用numpy.savez_compressed()

import numpy as np

arr1 = np.array([1, 2, 3])

arr2 = np.array([[4, 5], [6, 7]])

# 保存为压缩的.npz文件

np.savez_compressed('my_arrays_compressed.npz', a=arr1, b=arr2)

print("压缩的多个数组已保存为my_arrays_compressed.npz")

从.npz文件加载数组

同样使用numpy.load()函数,但返回一个类字典对象(NpzFile),可以通过键访问各个数组。

示例代码:

import numpy as np

# 加载.npz文件

loaded_data = np.load('my_arrays.npz')

# 访问数组

print("数组1:", loaded_data['array1']) # 使用保存时的键

print("数组2:", loaded_data['array2'])

# 如果使用位置参数保存,可以通过索引访问,如loaded_data['arr_0']

# 加载压缩文件

loaded_compressed = np.load('my_arrays_compressed.npz')

print("压缩数组a:", loaded_compressed['a'])

print("压缩数组b:", loaded_compressed['b'])

二进制文件的压缩(compress参数)

NumPy提供了压缩选项来减小.npz文件的大小,这对于大型数据集特别有用。压缩通过numpy.savez_compressed()函数实现,它内部使用ZIP压缩算法。

如何使用压缩

使用numpy.savez_compressed()函数时,压缩是自动启用的,无需额外参数。

与numpy.savez()相比,numpy.savez_compressed()生成的文件更小,但保存和加载速度可能稍慢,因为涉及压缩和解压缩过程。

示例代码:比较压缩效果

import numpy as np

import os

# 创建一个大型数组用于测试

large_arr = np.random.rand(1000, 1000) # 1000x1000的随机数组

# 保存为普通.npz文件

np.savez('large_array.npz', data=large_arr)

# 保存为压缩.npz文件

np.savez_compressed('large_array_compressed.npz', data=large_arr)

# 比较文件大小

size_normal = os.path.getsize('large_array.npz')

size_compressed = os.path.getsize('large_array_compressed.npz')

print(f"普通文件大小: {size_normal} 字节")

print(f"压缩文件大小: {size_compressed} 字节")

print(f"压缩率: {(size_normal - size_compressed) / size_normal * 100:.2f}%")

# 加载压缩文件以确保数据完整

loaded_compressed = np.load('large_array_compressed.npz')

print("加载的压缩数组形状:", loaded_compressed['data'].shape)

压缩的优势和注意事项

优势:节省存储空间,便于传输大数据集。

注意事项:压缩和解压缩会增加CPU开销,因此在对速度要求高的场景下需权衡。建议根据数据大小和性能需求选择是否启用压缩。

总结

本教程详细介绍了NumPy中二进制文件的读写方法,包括单个数组的.npy文件和多个数组的.npz文件。通过numpy.save()和numpy.load()函数,可以轻松保存和加载数据。对于多个数组,使用numpy.savez()或numpy.savez_compressed(),后者提供了压缩功能以优化存储。压缩通过compress参数(在numpy.savez_compressed()中内置)实现,适合处理大型数据集。建议初学者多实践这些操作,以提升数据管理效率。

通过掌握这些技巧,您可以在项目中高效地处理NumPy数组的持久化存储。如有疑问,请参考NumPy官方文档或尝试更多示例代码。

相关推荐

有影app免费版下载-有影下载2025安卓最新版v4.27.1
谁知道365bet网址

有影app免费版下载-有影下载2025安卓最新版v4.27.1

📅 10-01 👁️ 8826
外星人ALIENWARE 体验不一样的《英雄联盟》
谁知道365bet网址

外星人ALIENWARE 体验不一样的《英雄联盟》

📅 07-16 👁️ 1246
婚纱照要拍多久
365平台被黑

婚纱照要拍多久

📅 09-30 👁️ 7340