Parallel processing 在Cython中使用与nogil并行的数组的numpy数组

Parallel processing 在Cython中使用与nogil并行的数组的numpy数组,parallel-processing,cython,gil,cythonize,Parallel Processing,Cython,Gil,Cythonize,我想用nogil在Cython并行循环中分配numpy数组(数组中的元素为数组)。我使用dtype作为对象,以便能够将numpy数组指定为数组元素。它在Cython中工作,无需并行化。但通过使用parallel,它会给出以下错误消息: 不允许在没有gil的情况下分配Python对象 我确实尝试了不同的方法在cdef中声明,但它仍然不起作用。我不确定Cython并行化是否支持数组数组。如果是这样,那么什么是声明类型和赋值的最佳方法 cdef np.ndarray[ dtype= object, n

我想用nogil在Cython并行循环中分配numpy数组(数组中的元素为数组)。我使用dtype作为对象,以便能够将numpy数组指定为数组元素。它在Cython中工作,无需并行化。但通过使用parallel,它会给出以下错误消息:

不允许在没有gil的情况下分配Python对象

我确实尝试了不同的方法在cdef中声明,但它仍然不起作用。我不确定Cython并行化是否支持数组数组。如果是这样,那么什么是声明类型和赋值的最佳方法

cdef np.ndarray[ dtype= object, ndim=2]  ST_matrix=np.zeros( 10, dtype=   [('f1', '(4,)float64'), ('f2', '(4,)float64')])
错误消息:

不允许在没有gil的情况下分配Python对象

错误消息:

无法将类型“double[:]”分配给“double”


您将无法在
nogil
块中使用任何带有
dtype=object
的内容。我认为不能在
nogil
块中调用Python函数(例如
np.zeros
)。不幸的是,这可能无法并行工作。但是,如果只有一行导致您出现问题,但该行位于带有gil:块的
中。
cdef double [:,:] ST_matrix
ST_matrix=np.zeros( I, dtype=[('f1', '(4,)float64'), ('f2', '(4,)float64')])