我正在使用 f2py 将我的旧 Fortran 代码链接到 Python。虽然我做起来没有太大困难,但我仍然不知道如何处理整数。例如,下面是一段 Fortran 代码,其中一些整数与 intent(inout)(mlag、nyt、nut 和 net)一起使用。
subroutine maxlags(iext, nump, degree, nsuby, mlag, npt, nnt, nyt, nut, net)
implicit none
integer, intent(in) :: nump, degree, nsuby
integer, intent(in) :: iext(nump, degree, nsuby)
integer, intent(inout) :: mlag, npt(nsuby), nnt(nsuby), nyt, nut, net
...
end subroutine maxlags
在Python中,如果我将它们定义为
nst = np.array([0])
nyt = np.array([0])
nut = np.array([0])
net = np.array([0])
调用子程序有效,mlag、nyt、nut、net 的值更新,但出现警告信息
/var/folders/sj/q_5xy_n50ps10lg75p99wbw80000gn/T/ipykernel_87520/378702212.py:18:DeprecationWarning:不推荐将 ndim > 0 的数组转换为标量,并且将来会出错。确保在执行此操作之前从数组中提取单个元素。 (已弃用 NumPy 1.25。)
如果我将它们定义为
nst = np.int32(0)
nyt = np.int32(0)
nut = np.int32(0)
net = np.int32(0)
不再有警告消息,但 mlag、nyt、nut 和 net 的值不再更新。
如何消除警告消息? 或者是否有另一个定义整数以避免警告消息并更新它们的值?
非常感谢。
将它们设为 0d 数组,例如:
nst = np.array(0)
请注意,方括号已被删除。