首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用泡菜从MDAnalysis模块中转储宇宙对象?

如何使用泡菜从MDAnalysis模块中转储宇宙对象?
EN

Stack Overflow用户
提问于 2014-03-26 15:52:00
回答 1查看 258关注 0票数 1

我试图使用泡菜转储一个MDAnalysis.universe对象,但是我得到了错误消息,如

代码语言:javascript
复制
Traceback (most recent call last):
  File "convert.py", line 9, in <module>
    blob = pickle.dumps(u)
  File "/usr/lib/python2.7/pickle.py", line 1374, in dumps
    Pickler(file, protocol).dump(obj)
  File "/usr/lib/python2.7/pickle.py", line 224, in dump
    self.save(obj)
  File "/usr/lib/python2.7/pickle.py", line 331, in save
    self.save_reduce(obj=obj, *rv)
  File "/usr/lib/python2.7/pickle.py", line 419, in save_reduce
    save(state)
  File "/usr/lib/python2.7/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/usr/lib/python2.7/pickle.py", line 649, in save_dict
    self._batch_setitems(obj.iteritems())
  File "/usr/lib/python2.7/pickle.py", line 663, in _batch_setitems
    save(v)
  File "/usr/lib/python2.7/pickle.py", line 306, in save
    rv = reduce(self.proto)
  File "/usr/lib/python2.7/copy_reg.py", line 84, in _reduce_ex
    dict = getstate()
TypeError: 'AtomGroup' object is not callable

任何建议都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-15 07:11:48

更新的答案(适用于MDAnalysis≥2.0)

自从MDAnalysis 2.0.0 (2021年8月)以来,宇宙可以被腌制。

代码语言:javascript
复制
import MDAnalysis as mda
import pickle
u = mda.Universe(topology, trajectory)
pickle.dump(u, open("universe.pkl", "wb"))

# load pickled universe
u_pickled = pickle.load(open("universe.pkl", "rb"))

# test that we get same positions
(u_pickled.atoms.positions == u.atoms.positions).all()
# -> True

# but that universes are different
u == u_pickled
# -> False

还请参阅用户指南中的并行化分析

旧答案

MDAnalysis.Universe对象包含一些不能被标准机制序列化和腌制的对象,例如打开的文件描述符。我们需要编写专门的__getstate__()__setstate__()方法,如酸洗协议中所描述的,但这些方法在当前的0.8.1 (2014年4月)版本中都没有实现。

Manel在他的对MDAnalysis 173号问题的评论:泡菜搜索__getstate__()方法中解释了具体的错误。虽然这还没有实现,但Universe管理自己的属性以动态生成“虚拟属性”,将其解释为原子选择,并最终返回一个空的AtomGroup实例。这反过来被调用,因为泡菜相信它是__getstate__的本地实现。但是,AtomGroup是不可调用的,并且会导致错误。

正如您可能注意到的那样,通过在MDAnalysis用户列表上询问或提交问题,您得到了更快的响应-- Stackoverflow通常在开发人员列表中回答这些特定问题的级别较低。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22666400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档