当前位置:首页 > Python > 正文

Python保存.npy文件完全指南 - 高效数据存储教程

Python保存.npy文件完全指南

高效存储NumPy数组数据的最佳实践

什么是.npy文件?

.npy文件是NumPy库的专用二进制文件格式,用于高效存储NumPy数组数据。与CSV或文本文件相比,.npy文件具有以下优势:

  • 高效存储:二进制格式,文件更小
  • 快速读写:比文本文件快得多
  • 保留完整信息:包括数据类型、形状等元数据
  • 跨平台:在不同操作系统间兼容

安装NumPy

使用前需要先安装NumPy库:

pip install numpy

基本保存方法

使用numpy.save()函数保存单个数组:

import numpy as np

# 创建示例数组
data = np.array([[1, 2, 3], [4, 5, 6]])

# 保存为.npy文件
np.save('my_array.npy', data)

print("数组已成功保存!")

关键点:

  • 默认扩展名是.npy,但也可以自定义
  • 文件包含所有数组信息(维度、数据类型等)
  • 如果文件已存在,将被覆盖

保存多个数组

使用numpy.savez()保存多个数组到单个文件:

import numpy as np

# 创建多个数组
arr1 = np.arange(10)
arr2 = np.random.rand(5, 5)
arr3 = np.array(['Python', 'NumPy', 'Data'])

# 保存到单个.npz文件
np.savez('multiple_arrays.npz', array1=arr1, matrix=arr2, labels=arr3)

print("多个数组已成功保存!")

注意:

  • 保存的文件扩展名应为.npz
  • 数组通过关键字参数命名
  • 加载时使用np.load()['关键字']访问数组

压缩存储

对于大型数组,使用numpy.savez_compressed()节省磁盘空间:

import numpy as np

# 创建大型数组
large_array = np.random.rand(1000, 1000)

# 压缩保存
np.savez_compressed('compressed_array.npz', big_data=large_array)

print("压缩数组已成功保存!")

适用场景:

  • 大型数据集(如图像、矩阵)
  • 需要长期存储的数据
  • 磁盘空间有限的场景

实际应用示例

机器学习中保存和加载数据集:

import numpy as np
from sklearn.datasets import load_iris

# 加载鸢尾花数据集
iris = load_iris()
X, y = iris.data, iris.target

# 保存特征和标签
np.save('iris_features.npy', X)
np.save('iris_labels.npy', y)

# 在另一个程序中使用
X_loaded = np.load('iris_features.npy')
y_loaded = np.load('iris_labels.npy')

print("特征形状:", X_loaded.shape)
print("标签形状:", y_loaded.shape)

优势:

  • 比CSV加载速度快10倍以上
  • 保持数据类型和形状信息
  • 特别适合大型数据集

最佳实践

  • 文件命名:使用有意义的文件名和扩展名
  • 版本控制:对大型数据集添加版本号
  • 数据类型:保存前使用astype()优化数据类型
  • 错误处理:添加异常处理机制
import numpy as np

try:
    # 尝试保存操作
    data = np.random.rand(100, 100)
    np.save('important_data.npy', data)
    
except PermissionError:
    print("错误:没有文件写入权限")
except Exception as e:
    print(f"保存过程中发生错误: {str(e)}")
else:
    print("数据保存成功!")

发表评论