我必须使用 numba 的 dict (numba.typed.typeddict.Dict) 类型来定义字典:

@njit
def init_numba_dict():
    x = numpy.array([0], dtype=numpy.int32)
    return {"01234-5": x[0], "0-1": x[0]}

myDict = init_numba_dict()

现在我需要将它保存到一个文件中。 我认为以下代码应该有效:

import pickle
filehandler = open("file.dat", 'wb') 
pickle.dump(myDict , filehandler, pickle.HIGHEST_PROTOCOL)
filehandler.close()

我收到了这个错误:“TypeError: can't pickle _nrt_python._MemInfo objects”

任何提示? 如何将 numba.typed.typeddict.Dict 的内容保存和恢复到文件?

#1楼 票数:2

很好的问题。 我刚刚遇到了同样的错误并找到了解决方案。 发生错误是因为 numba(C 语言)在数组或字典方面返回一个指针而不是像 python 这样的值。 另一方面,pickle 要求输入一个 python 对象。 因此,您需要做的就是在使用 dict() 函数对其进行酸洗之前将 numba dict 更改为 python dict 对象。

import pickle
filehandler = open("file.dat", 'wb') 
pickle.dump(dict(myDict), filehandler, pickle.HIGHEST_PROTOCOL)
filehandler.close()

  ask by user898160 translate from so

未解决问题?本站智能推荐:

5回复

dict对象如何被腌制?

在阅读了pickle文档之后,我得到了一个印象,即一个类需要实现__reduce__或__getstate__来正确地进行pickle。 但是,字典的酸洗工作呢? 他们没有任何这些属性: 另外,从dict派生的类是如何被腌制的?
1回复

如何腌制从dict派生的python对象

这是我需要腌制的班级: 在我看来, __reduce__应该照顾酸洗,但是: 我也应该定义__getstate__吗? 我对可用于自定义酸洗的所有这些多种方法完全迷失了: __getinitargs__ , __getstate__ , __reduce__等等。 Goo
1回复

Python类继承:dict如何腌制(保存,加载)

我在玩类继承,并且在如何腌制类字典中的数据上遇到麻烦。 如果仅转储self的字典部分,则在将字典加载回self时,self将采用dict类型而不是类。 但是,如果我给全班同学泡菜,那我就会出错。 错误 码
2回复

腌制预设变量

好的,基本上我想实现的是在第一次运行程序时将MaTC,AnTC,AuTC,AlTC和JaTC变量预设为1、2、3、3和3。 但是,当我想添加2来表示MaTC使其成为3时,当我再次启动程序时,我希望它在启动时= 3。 我几天前才刚开始使用python,我希望收到反馈!
1回复

腌制所有变量

我正在寻找一种方法来按排序顺序使用值对所有变量进行腌制。我正在尝试以下方法: 预期结果:将va值附加到totalList ,然后是vb's ......等等。 然后将totalList转储到泡菜文件中。 我得到这样的结果: 我想摆脱结果('pickle', 'time', 'os', 'r
2回复

将numba的dict类型替换为python函数的参数

在我的代码中,有很多参数在运行期间是不变的。 我定义了一个dict类型变量来存储它们。 但我发现numba无法支持dict 。 有什么更好的方法来解决这个问题?
1回复

如何在numba中声明其值为嵌套列表的类型化Dict

您好,我知道 numba 有一个 numba.typed.Dict,它是一个类型化的 dict,但我的 dict 的值是一个列表列表,dict 中的每个键可能具有不同长度的外部列表; 每个内部列表也可能有不同的长度; 不过,内部列表的类型是一对 float32。 我想知道 numba 是否支持这种结
1回复

如何有选择地腌制类实例的变量?

我有一个类实例: 我对self.matrix做了一些乘法。 当我腌制A类的实例时,由于某种原因,我不想腌制self.matrix 。 目前,我的解决方案是在腌制之前将self.matrix = None设置为self.matrix = None ,并在从腌制文件中加载self.m