为什么需要Numpy文件读写?¶
在使用Numpy处理数据时,我们经常需要临时存储中间结果或长期保存数据以便后续使用。例如,在机器学习项目中,训练模型后需要保存参数;或者数据分析中,需要重复使用之前处理好的数组。Numpy提供了save和load等函数,让我们可以轻松实现数组数据的持久化(即数据的存储与读取)。
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'])
对比:savez与save¶
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数据持久化的核心方法,可灵活应对数组的存储与读取需求。