До недавнего времени я использовал IDL для решения большинства своих вычислительных задач. Одна из моих наиболее часто используемых подпрограмм — это фрагмент кода fortran90, завернутый в C и вызываемый из IDL с помощью функции CALL_EXTERNAL (ничего из этого не написано мной). По разным причинам я переношу большинство вычислений на Python, но не нашел хорошего способа включения кода на Фортране. Кажется, что F2PY — самый очевидный способ, однако на практике полученный модуль оказывается довольно нестабильным.
В основном мне интересно, есть ли лучший способ подойти к проблеме. Кажется, что должно быть относительно просто переработать существующую оболочку C и Cython, чтобы использовать код из Python, хотя я должен признаться, что совершенно не знаком с C/Cython и совершенно новичок в python, поэтому любая помощь будет принята с благодарностью. .
Для справки я включаю существующую оболочку C ниже:
#include <stdio.h>
void bvls(int argc, void *argv[]) {
extern void bvls_();
int *n, *m, *nsetp, *index, *ierr;
double **a, **b, **bnd, **w, **x;
double *rnorm;
a = (double **) argv[0];
m = (int *) argv[1];
n = (int *) argv[2];
b = (double **) argv[3];
bnd = (double **) argv[4];
x = (double **) argv[5];
rnorm = (double *) argv[6];
nsetp = (int *) argv[7];
w = (double **) argv[8];
index = (int *) argv[9];
ierr = (int *) argv[10];
bvls_(a,m,n,b,bnd,x,rnorm,nsetp,w,index,ierr);
}
РЕДАКТИРОВАТЬ: Упомянув об этом кому-то еще, они предположили, что также можно использовать модуль fortran ISO_C_BINDINGS для прямого взаимодействия с Cython, минуя потребность в промежуточной оболочке C.
f2py
созданным модулем? - person kynan   schedule 27.07.2013