Мой подход к этой проблеме (когда я оборачиваю код fortran с помощью f2py) состоит в том, чтобы явно объявить все соответствующие массивы numpy в порядке fortran, потому что numpy может счастливо работать с ними прозрачно, и он даже хорошо работает, комбинируя массивы порядка fortran и C , К сожалению, кажется, что обалденные операции не сохраняют порядок Фортрана. Поэтому вам следует предварительно выделить массивы назначения, которые будут переданы в MEX в следующем порядке, например:
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, поскольку у назначения есть неявная копия.
Однако не нужно переупорядочивать массивы фортранов, выходящие из вашей процедуры MEX - numpy будет работать с ними совершенно прозрачно, если знает, в каком порядке они находятся.