Объявление массива / numpy массива как поля-члена в структуре Cython, которое позже будет использовано для объявления массива numpy структуры - PullRequest
0 голосов
/ 27 февраля 2020

В 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
    )
...