为什么需要Numpy文件读写?

在使用Numpy处理数据时,我们经常需要临时存储中间结果或长期保存数据以便后续使用。例如,在机器学习项目中,训练模型后需要保存参数;或者数据分析中,需要重复使用之前处理好的数组。Numpy提供了saveload等函数,让我们可以轻松实现数组数据的持久化(即数据的存储与读取)。

Numpy的save与load:单个数组的持久化

1. np.save():保存单个数组到文件

np.save()用于将单个Numpy数组保存为二进制文件(扩展名为.npy),格式如下:

np.save(文件名, 数组)

示例

import numpy as np

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

# 保存数组到文件(自动生成my_array.npy)
np.save('my_array', arr)

2. np.load():从文件加载数组

np.load()用于从.npy文件中读取数组数据,格式如下:

np.load(文件名)

示例

# 加载保存的数组
loaded_arr = np.load('my_array.npy')

# 验证数组内容是否一致
print("原数组:", arr)
print("加载后的数组:", loaded_arr)
print("数组是否相同:", np.array_equal(arr, loaded_arr))  # 输出 True

关键点:文件扩展名

  • np.save()会自动为文件添加.npy扩展名(即使你不写),例如np.save('data', arr)生成data.npy
  • 加载时需确保文件路径正确,且文件已存在。

Numpy的savez:多个数组的持久化

当需要同时保存多个数组时,使用np.savez(),它会将多个数组压缩到一个.npz文件中。

1. np.savez():保存多个数组

np.savez(文件名, 数组1=数组1, 数组2=数组2, ...)

示例

# 创建两个数组
arr1 = np.array([1, 2, 3])
arr2 = np.array([[4, 5, 6], [7, 8, 9]])

# 保存多个数组到my_arrays.npz(键名分别为'arr1'和'arr2')
np.savez('my_arrays', arr1=arr1, arr2=arr2)

2. np.load():加载多个数组

加载.npz文件时,返回一个类似字典的对象,可通过数组名(键名)访问各个数组。

示例

# 加载多个数组
loaded_data = np.load('my_arrays.npz')

# 查看所有数组名
print("数组名:", loaded_data.files)  # 输出 ['arr1', 'arr2']

# 通过键名访问数组
print("arr1:", loaded_data['arr1'])
print("arr2:", loaded_data['arr2'])

对比:savezsave

  • save仅能保存单个数组,适合简单场景。
  • savez可保存多个数组,适合数据分组存储(如模型参数+数据标签)。

实战示例:数据处理全流程

场景:保存并加载实验数据

import numpy as np

# 1. 生成模拟数据
data1 = np.random.rand(100)  # 100个随机数
data2 = np.random.randn(50, 50)  # 50x50随机正态分布数组

# 2. 保存数据
np.save('data1.npy', data1)
np.savez('data2_50x50.npz', matrix=data2)

# 3. 后续使用时加载
loaded_data1 = np.load('data1.npy')
loaded_data2 = np.load('data2_50x50.npz')['matrix']

# 4. 数据分析
print("data1的均值:", np.mean(loaded_data1))
print("data2的形状:", loaded_data2.shape)
print("data2的最大值:", np.max(loaded_data2))

补充:文本格式保存(savetxt/loadtxt)

如果需要将数组保存为纯文本(如CSV格式),可使用np.savetxt()np.loadtxt()

# 保存为CSV(逗号分隔)
np.savetxt('data.csv', data1, delimiter=',')

# 加载文本文件
loaded_csv = np.loadtxt('data.csv', delimiter=',')

注意:文本格式适合人类可读,但二进制格式(.npy/.npz)更高效,且能保留数据类型。

总结

  • 单个数组:用np.save()np.load(),生成.npy文件。
  • 多个数组:用np.savez()np.load(),生成.npz文件。
  • 文本格式:用savetxt()loadtxt(),适合CSV等简单场景。

通过本文,你已掌握Numpy数据持久化的核心方法,可灵活应对数组的存储与读取需求。

小夜