使用f2py将numpy字符串格式数组传递给fortran

我的目标是从fortran中的python numpy数组中打印第二个字符串,但我只打印出第一个字符,并且它也不一定是正确的字符串.

任何人都可以告诉我将完整的字符串数组传递给fortran的正确方法是什么?

代码如下:

testpy.py

import numpy as np
import testa4

strvar = np.asarray(['aa','bb','cc'], dtype = np.dtype('a2'))
testa4.testa4(strvar)

testa4.f90

subroutine testa4(strvar)
implicit none

character(len=2), intent(in) :: strvar(3)
!character*2 does not work here - why?

print *, strvar(2)

end subroutine testa4

编译

f2py -c -m testa4 testa4.f90

输出上述代码

c

期望的输出

bb

解决方法:

我不知道如何使用f2py做到这一点.但它可以用ctypes完成.你得到一个字符数组,但你可以很容易地将它转换为字符串.

subroutine testa4(strvar) bind(C, name='testa4')
  use iso_c_binding
  implicit none

  character(len=1,kind=c_char), intent(in) :: strvar(2,3)

  print *, strvar(:,2)

end subroutine testa4

编译:gfortran -shared -fPIC testa4.f90 -o testa4.so

import numpy as np
import ctypes

testa4 = ctypes.CDLL("./testa4.so")

strvar = np.asarray(['aa','bb','cc'], dtype = np.dtype('a2'))
strvar_p = ctypes.c_void_p(strvar.ctypes.data)

testa4.testa4(strvar_p)

跑:

> python testpy.f90 
 bb
上一篇:是否有适用于Linux的高性能Fortran编译器?


下一篇:linux – Gfortran警告抱怨“Wmaybe -ininitialized”