You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将包含NumPy数组的named tuple序列化到文件?

持久化含字符串与NumPy数组的named tuple列表的方法

针对你的需求,这里提供两种简单可靠的方案,直接上手就能用:

方案一:沿用你熟悉的NumPy序列化方式

因为numpy.save开启allow_pickle=True后支持序列化任意可pickle的Python对象,而named tuple本身是可pickle的,所以直接复用这个逻辑即可:

import numpy as np
from collections import namedtuple

# 定义named tuple
Point = namedtuple('Address', 'city embedding') 

# 创建测试数据
point_list = [
    Point(city="Beijing", embedding=np.arange(300)),
    Point(city="Shanghai", embedding=np.arange(200))
]

# 持久化到文件
np.save('points.npy', point_list, allow_pickle=True)

# 重新加载
loaded_points = np.load('points.npy', allow_pickle=True)

# 验证加载结果
print(loaded_points[0].city)  # 输出 Beijing
print(loaded_points[0].embedding.shape)  # 输出 (300,)

方案二:使用Python原生pickle模块

如果需要更通用的Python对象序列化方案,原生pickle模块是更直接的选择:

import pickle
import numpy as np
from collections import namedtuple

# 定义named tuple
Point = namedtuple('Address', 'city embedding') 

# 创建测试数据
point_list = [
    Point(city="Beijing", embedding=np.arange(300)),
    Point(city="Shanghai", embedding=np.arange(200))
]

# 持久化到文件
with open('points.pkl', 'wb') as f:
    pickle.dump(point_list, f, protocol=4)  # 指定protocol提升跨版本兼容性

# 重新加载
with open('points.pkl', 'rb') as f:
    loaded_points = pickle.load(f)

# 验证加载结果
print(loaded_points[1].city)  # 输出 Shanghai
print(loaded_points[1].embedding.shape)  # 输出 (200,)

注意事项

  • 加载数据时,当前运行环境必须提前定义好对应的named tuple(即Point = namedtuple('Address', 'city embedding')),否则会触发反序列化错误。
  • 如果需要在不同Python版本间共享数据,建议指定pickle协议版本(比如protocol=4),避免兼容性问题。

内容的提问来源于stack exchange,提问作者Exploring

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 22:57:25