В Cython я пытаюсь использовать распараллеливание для ускорения циклов. В для l oop я хотел бы последовательно суммировать массив с плавающей точкой и массив массивов. Поэтому сначала я объявляю пользовательский тип numpy dtype, содержащий поля-члены float и массив. Нам также нужна структура C, чтобы использовать ее в разделах nogil. Затем я инициализирую массив моего пользовательского numpy dtype с помощью np.zeros и накапливаю с использованием распараллеленного для l oop.
Однако использование массива numpy в структуре не допускается. Как правильно это сделать? Как избежать утечки памяти?
# 1. Declare my custom numpy dtype with two member fields
MY_DTYPE = np.dtype([
('member_float', np.float32),
('member_array', np.ndarray)
])
# 2. in .pxd file declare my custom cython struct corresponding to MY_DTYPE
cdef packed struct my_struct:
np.npy_float32 member_float
np.ndarray member_array
# 3. initialize an array of my_struct to all zeros
cdef:
my_struct[:, ::1] my_struct_array = np.zeros(
shape=(10, 100),
dtype=MY_DTYPE
)