SWP белгісіз ұзындық жиымымен NumPy C кеңейтімі

SWIF функциясымен C функциясын оралғым келеді. Функция кіріс ретінде бірнеше массивтерді (бірдей ұзындықты) алады және тағы үш қосымша массивтерді қайтарады. Дегенмен, қайтару массивтерінің ұзындығын алдын-ала болжау мүмкін емес, бұл функцияда динамикалық бөлінген. Мұндай функцияны SWIG-пен (numpy.i-ні қолданып) орап алуға бола ма? Оңайлатылған функция декларациясы келесідей:

int func(double **a, double **b, long int *N, double *x, double *y, long int *Nx, long int *Ny);

Nx және Ny бұрыннан белгілі, бірақ N (ұзындығы a және b ) емес және a және b бөлінген ( malloc ).

4
Бұл мәселе тек C мәселесі ме? Swig функциясы сіздің бастапқы функцияңызды орауды аяқтасаңыз да, C ++-дан std :: vector арқылы шешуге оңайырақ болады.
қосылды автор Flexo, көзі
Бұл себептен SWIG-ті тастауға ешқандай себеп жоқ. SWIG-тің үлгілерін пайдаланбаңыз (олар тозақ сияқты күрделі). Қажетті жерде өзіңіздің орауыштарыңызды жаза аласыз, PyObject * параметрлерін қайтарады және қабылдай аласыз. SWIG оларды таниды, сонымен қатар қарапайым істерді (мысалы, int) қолданады.
қосылды автор maxy, көзі
Ия - бұл тек С сұрағы. Мен осы мәселе бойынша SWIG-ке бас тарттым және қолмен жұмыс жасайтын қаптаманы жаздым. Мен жауапты жібере аламын, бірақ бұл мәселеге шынымен жауап бермеймін, өйткені SWIG пайдаланбаймын.
қосылды автор Pim Schellart, көзі

1 жауаптар

SWIG (немесе осы мәселе бойынша кез-келген басқа Python орауыш генераторы) мұны жасай алмайды. Мен Python қаптамасын қолмен жазуды аяқтадым, ол өте оңай, яғни PyArray_SimpleNew немесе PyArray_SimpleNewFromData </​​code> арқылы шығару массивтерін жасау. Екіншіден, еске түсіруді жасамау үшін қосымша абай болу керек. Оны ойнағаннан кейін, мен бұрынғы қарапайым memcpy элементімен бірге қауіпсіздікті тауып алдым.

1
қосылды