如何对numpy的Inf对象进行序列化?

3 投票
2 回答
1079 浏览
提问于 2025-04-15 13:28

当我尝试把一个在numpy中定义的对象Inf进行序列化时,序列化的过程是成功的,但在加载的时候却失败了:

>>> cPickle.dump(Inf, file("c:/temp/a.pcl",'wb'))
>>> cPickle.load(file("c:/temp/a.pcl",'rb'))
Traceback (most recent call last):
  File "<pyshell#257>", line 1, in <module>
    cPickle.load(file("c:/temp/a.pcl",'rb'))
ValueError: could not convert string to float
>>> type(Inf)
<type 'float'>

这是为什么呢?而且,还有没有办法解决这个问题?我想序列化一个包含Inf的东西,改成其他的会影响程序的优雅性...

谢谢

2 个回答

-1

试试这个在SourceForge上的解决方案,它可以处理任何Python对象:

y_serial.py模块 :: 使用SQLite存储Python对象

“序列化 + 持久化 :: 只需几行代码,就能把Python对象压缩并注释到SQLite中;然后可以根据关键词按时间顺序检索它们,而不需要任何SQL。这是一个非常有用的‘标准’模块,用于存储没有固定结构的数据。”

http://yserial.sourceforge.net

5

如果你指定一个大于零的pickle协议,它就会正常工作。协议通常指定为-1,这意味着使用最新最好的协议:

>>> cPickle.dump(Inf, file("c:/temp/a.pcl",'wb'), -1)
>>> cPickle.load(file("c:/temp/a.pcl",'rb'))
1.#INF                   -- may be platform dependent what prints here.

撰写回答