也許傳遞實際數組而不是內存視圖可以解決您的問題。 如果你想並行執行一個函數,如果我記得正確的話,它的所有參數都必須是可選擇的。至少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