Я хотел бы создать 2D-массив в функции cdef
с количеством элементов в каждом измерении в зависимости от параметров, переданных в функцию. Например.:
cdef int[:,:] c_volumecheck(int n):
cdef:
const int comb = 2**n
const int nt = n
int match[comb][nt]
size_t i,j
# initialize values
for i in range(comb):
for j in range(n):
match[i][j] = 0
return match
Однако назначение константного выражения comb
и nt
, похоже, не работает, поскольку я получаю сообщение об ошибке «Не разрешено в постоянном выражении» в строке int match[comb][nt]
. Ручное задание соответствующих значений работает (match[8][3]
, например, n=3
). Однако это не вариант, так как эти значения меняются во время работы программы.
Во-вторых, я, похоже, не понимаю, как вернуть этот массив в другую функцию cdef
или def
в том же .pyx
-скрипте: int[:,:]
не соответствует 2d-массиву, подобному тому, который я хочу инициализировать.
int[:,:]
— это синтаксис для типизированного представления памяти; Я предлагаю прочитать/поэкспериментировать с этой страницей документа: cython.readthedocs.io/ ru/latest/src/userguide/memoryviews.html - person hpaulj   schedule 05.06.2017def
в скрипте `pyx'. Вероятно, я мог бы сохранить его в среде «cdef». Но я определенно не буду использовать значение вне cython. - person user3820991   schedule 06.06.2017c
, немного измененное синтаксисомcython
? - person hpaulj   schedule 06.06.2017cdef double[:,:] myarray = np.zeros((2**n, n))
заменит часть инициализации вашей функции. - person Pierre de Buyl   schedule 06.06.2017