numpy中保存加载数据的方式

本文介绍了numpy库中用于保存和加载数据的函数,包括numpy.save和numpy.load用于单个npy文件操作,numpy.savez用于保存多个数组到npz压缩文件,以及pickle模块用于保存和加载不同类型的数据,保持数据结构不变。

保存/加载npy

全局函数形式:

numpy.save("filename.npy",a)
a = numpy.load("filename")

保存/加载txt

保存/加载npz

如果想多组数组保存到一个文件中,可以使用np.savez,其第一个参数为文件名,其后面是需要保存的数组,也可以是使用关键字参数为数组起一个名字,非关键字参数传递的数组会自动起名为arr_0, arr_1;

savez函数输出的是一个压缩文件(扩展名为.npz),其中每个文件都是一个save函数保存的.npy文件,文件名对应于数组名;

load函数自动识别.npz文件,并返回一个类似于字典的对象,可以通过数组名作为关键字获取数组的内容;

import numpy as np

if __name__ == '__main__':
    ######################################################
    ## 保存数据 ##
    a = np.arange(3)
    b = np.arange(4)
    c = np.arange(5)
    np.savez('array_save.npz', a, b, c_array=c)

    ## 加载数据 ##
    A = np.load('array_save.npz')
    # print(type(A))  # <class 'numpy.lib.npyio.NpzFile'>

    print(A['arr_0'])
    print(A['arr_1'])
    print(A['c_array'])

保存/加载pickle

pickle能保存数据, 类型不改变

np.load("some.pkl", allow_pickle=True)
<think>好的,我现在需要帮助用户解决关于如何使用NumPy保存数据的问题。首先,回顾一下之前的对话历史,用户之前询问了如何在Linux中查看主机IP,我给出了详细的命令行方法和图形化方法。现在用户转向了NumPy数据保存,可能是在进行数据处理或科学计算时需要保存结果。 首先,我要确认用户的具体需求。保存数据可能有不同的格式和用途,比如保存为二进制文件以便快速读写,或者保存为文本文件方便查看。用户可能还不清楚有哪些方法,所以需要全面介绍。 接下来,我需要回忆NumPy中常用的数据保存函数,主要是np.save和np.savez,以及np.savetxt。这些函数各有不同的应用场景。例如,np.save保存为二进制格式,适合快速读取;np.savetxt生成文本文件,便于人类阅读;而np.savez可以保存多个数组,方便组织数据。 然后,我需要考虑用户可能的进阶需求,比如如何处理大型数据、跨平台兼容性,或者如何压缩数据节省空间。这时候np.savez_compressed可能是一个有用的函数,值得提及。 另外,用户可能对如何加载这些保存数据也有疑问,所以应该简要提到对应的加载函数,如np.load和np.loadtxt,但主要焦点还是保存方法。 需要确保回答结构清晰,分点说明,每个方法都给出示例代码和适用场景,这样用户可以根据自己的情况选择合适的方法。同时,要提醒注意事项,比如文件扩展名、数据精度和压缩效率等。 还要注意用户可能遇到的常见问题,比如加载数据时的路径错误,或者文本文件与二进制文件的选择问题。不过根据用户当前的问题,可能不需要深入这些细节,但如果有常见错误可以简要提及。 最后,确保语言简洁,使用中文,避免专业术语过多,必要时进行解释。比如,解释二进制文件和文本文件的区别,或者为什么推荐某些方法。 总结一下,回答的结构应该是先介绍主要方法,然后进阶技巧,最后注意事项。每个部分用标题分隔,代码示例用合适的格式,并说明每个方法的优缺点和适用情况。这样用户能够逐步了解不同保存方式,并根据需求选择最合适的。</think>在NumPy保存数据主要通过以下核心方法实现,根据数据类型和需求选择最佳方案: --- ### **一、基础保存方法** #### **1. 单数组存储(`.npy`格式)** ```python import numpy as np data = np.array([1, 2, 3]) # 保存到当前目录 np.save('data.npy', data) # 自动添加.npy扩展名 ``` - **特点**:二进制格式,读写速度快,存储空间小 - **验证加载**:`loaded_data = np.load('data.npy')` --- #### **2. 多数组存储(`.npz`格式)** ```python arr1 = np.arange(10) arr2 = np.random.rand(5,5) # 保存多个数组 np.savez('dataset.npz', matrix=arr1, random_data=arr2) # 加载时按关键字提取 archive = np.load('dataset.npz') print(archive['random_data']) ``` - **特点**:打包存储多个数组,支持命名管理 --- #### **3. 文本格式存储(`.txt`/`.csv`)** ```python np.savetxt('data.csv', data, delimiter=',', # 分隔符 fmt='%.4f', # 格式:保留4位小数 header='Values') # 添加标题行 ``` - **适用场景**:需人工查看/编辑数据时使用 - **加载文本数据**:`np.loadtxt('data.csv', delimiter=',')` --- ### **二、进阶存储技巧** #### **1. 压缩存储(节省空间)** ```python # 使用压缩格式存储多个数组 np.savez_compressed('compressed_data.npz', large_array=np.random.rand(1000,1000)) ``` - **效果**:对稀疏矩阵或重复数据压缩率可达70%+ --- #### **2. 内存映射存储(处理超大文件)** ```python # 创建可扩展的内存映射文件 mmap_data = np.memmap('large_data.dat', dtype='float32', mode='w+', shape=(100000,)) mmap_data[:] = np.random.rand(100000) del mmap_data # 强制写入磁盘 ``` - **优势**:处理超过内存容量的数据 --- ### **三、格式对比指南** | 格式类型 | 速度 | 可读性 | 文件大小 | 典型用途 | |-----------|-------|-------|--------|-------------------| | .npy | ★★★★★ | ★☆☆☆☆ | 最小 | 单数组快速存取 | | .npz | ★★★★☆ | ★☆☆☆☆ | 较小 | 多数组归档 | | .npz压缩版 | ★★★☆☆ | ★☆☆☆☆ | 最小 | 海量数据存储 | | 文本文件 | ★★☆☆☆ | ★★★★★ | 最大 | 数据交换/可视化编辑 | --- ### **四、关键注意事项** 1. **二进制安全**:`.npy`/`.npz`文件不可手动修改,需通过NumPy操作 2. **跨平台兼容**:不同系统间传输时建议使用文本格式或验证字节序 3. **版本兼容性**:高版本NumPy生成的文件可能在旧版本无法读取 4. **精度控制**:文本存储时用`fmt`参数指定精度,如`fmt='%d'`保存整数 --- ### **五、实战组合应用** ```python # 同时保存原始数据和元数据 np.savez('experiment_data.npz', raw_data=sensor_readings, sample_rate=44100, # 保存标量参数 timestamps=time_array) # 保存训练日志(文本+二进制混合) np.savetxt('loss_log.txt', loss_values) np.save('weights.npy', model_weights) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wugou2014

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值