f2py - 了解如何传递整数(并避免消息 Deprecated NumPy 1.25。)

问题描述 投票:0回答:1

我正在使用 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 的值不再更新。

如何消除警告消息? 或者是否有另一个定义整数以避免警告消息并更新它们的值?

非常感谢。

python numpy fortran fortran90 f2py
1个回答
0
投票

将它们设为 0d 数组,例如:

nst = np.array(0)

请注意,方括号已被删除。

© www.soinside.com 2019 - 2024. All rights reserved.