import numpy as np
cdef class Foo:
cdef double[:,:] matrix
def __init__(self, matrix):
'''Assign a passed array to the typed memory view.'''
self.matrix = matrix
def __reduce__(self):
'''Define how instances of Foo are pickled.'''
d=dict()
d['matrix'] = np.asarray(self.matrix)
return (Foo, (d['matrix'],), d)
def __setstate__(self, d):
'''Define how instances of Foo are restored.'''
self.matrix = d['matrix']
1 回答
也许传递实际数组而不是内存视图可以解决您的问题 . 如果你想并行执行一个函数,如果我没记错的话,所有参数都必须是可选的 . 至少python多处理就是这种情况 . 因此,您可以将数组传递给函数并在函数内创建memoryview .
我不知道这对你有帮助,但我遇到了类似的问题 . 我使用memoryview作为cdef类中的属性 . 我必须编写自己的reduce和setstate方法来正确地解开我 class 的实例 . 使用
numpy.asarray
将内存视图作为数组腌制并在__setstate__
中恢复它对我有用 . 我的代码的简化版本:请注意
__reduce__
返回一个元组,该元组由一个可调用的(Foo
),一个可调用的参数元组(即创建'new'Foo实例所需的内容,在本例中是保存的矩阵)和包含恢复所需的所有值的字典组成 . 实例 .