<p>根据<a href="http://docs.scipy.org/doc/numpy-dev/f2py/python-usage.html#string-arguments" rel="nofollow">documentation</a>,f2py喜欢使用dtype='c'(例如,'| S1')传递字符串数组。这让你有了一部分的方法,尽管在幕后对数组形状有一些奇怪的地方(例如,在我的很多测试中,我发现fortran会保持2个字符的长度,但将6个字符解释为表示2x6数组,因此我会在输出中重新获得随机内存)。这(据我所知)要求您将Fortran数组视为二维字符数组(而不是一维“字符串”数组)。不幸的是,我无法使它成形,最后将字符串的数量作为参数传入。在</p>
<p>我很确定我遗漏了一些相当明显的东西,但这暂时应该行得通。至于为什么CHARACTER*2不起作用。。。我真的不知道。在</p>
<pre><code>MODULE char_test
CONTAINS
SUBROUTINE print_strings(strings, n_strs)
IMPLICIT NONE
! Inputs
INTEGER, INTENT(IN) :: n_strs
CHARACTER, INTENT(IN), DIMENSION(2,n_strs) :: strings
!f2py INTEGER, INTENT(IN) :: n_strs
!f2py CHARACTER, INTENT(IN), DIMENSION(2,n_strs) :: strings
! Misc.
INTEGER*4 :: j
DO j=1, n_strs
WRITE(*,*) strings(:,j)
END DO
END SUBROUTINE print_strings
END MODULE char_test
import numpy as np
import char_test as ct
strings = np.array(['aa', 'bb', 'cc'], dtype='c').T
ct.char_test.print_strings(strings, strings.shape[1])
strings = np.array(['ab', 'cd', 'ef'], dtype='c').T
ct.char_test.print_strings(strings, strings.shape[1])
>python run_char_test.py
aa
bb
cc
ab
cd
ef
</code></pre>