也许传递实际数组而不是内存视图可以解决您的问题。 如果你想并行执行一个函数,如果我记得正确的话,它的所有参数都必须是可选择的。至少python多处理就是这种情况。所以你可以将数组传递给函数,并在函数内部创建内存视图。
def some_function(matrix_as_array):
cdef double[:,:] matrix = matrix_as_array
...
我不知道这是否有助于您,但我遇到了类似的问题。我使用一个memoryview作为cdef类中的一个属性。我不得不写我自己的__reduce__
和__setstate__
方法来正确取消我的课程的实例。通过使用numpy.asarray
将内存视图作为数组进行酸洗并在__setstate__
中恢复为我工作。我的代码的简化版本:
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']
注意__reduce__
回报包括一个可调用(Foo
)一个元组,来创建一个“新”富例如什么是需要的是可调用的参数(即一个元组,在这种情况下保存的矩阵)和具有恢复实例所需的所有值的字典。
需要更多信息。 – akaRem