Ответ 1
Мой подход к этой проблеме (когда я завершаю код fortran с помощью f2py) заключается в явном объявлении всех соответствующих массивов numpy в порядке fortran, потому что numpy может с радостью работать с ними прозрачно, и он даже хорошо работает, комбинируя массивы fortran и C, К сожалению, кажется, что операции numpy не сохраняют fortran-порядок. Поэтому вы должны предварительно выделить целевые массивы, которые будут переданы MEX в порядке fortran, например:
A = np.empty((10, 10))
B = np.empty((10,2))
# fill A and B with the data you want
C = np.empty((10, 2), order='F')
C[:] = np.dot(A, B) # note that this index is essential
# C is then passed to your MEX routine
Я не уверен, что это намного эффективнее, чем ваше решение A, поскольку у задания есть неявная копия.
Однако не должно быть необходимости переупорядочивать массивы fortran, выходящие из вашей процедуры MEX - numpy будет иметь дело с ними достаточно прозрачно, если он знает, в каком порядке они находятся.