【发布时间】:2021-03-04 15:18:22
【问题描述】:
是否可以从 fortran 中获取两个值? 例如,我想从一个矩阵中得到最高分和这个坐标
# python code
import numpy as np
matrix = np.array([[1, 10, 3, 4, 9],
[2, 1, 0, 9, 13],
[3, 5, 10, 18, 3]])
max_score= 0
column_coord = 0
row_coord = 0
for i in range(len(matrix[:,0])):
for j in range(len(matrix[0,:])):
if matrix[i, j] >= max_score:
# getting max_score, column, row coordinate
max_score= matrix[i, j]
column_coord = i
row_coord = j
print(max_score, column_coord, row_coord)
这段代码可以正常工作,但是如果矩阵变大,会花费很多时间
找到我想要的值。
所以,我决定使用 f2py 来进行更快的计算,这就是 fortran 代码。
cc 是列长,rr 是行长。
subroutine findthemax(cc, rr, matrix, max_score, col_coord, row_coord)
integer, intent(in) :: cc, rr
integer, intent(in) :: matrix(0:cc, 0:rr)
integer, intent(out) :: max_score, col_coord, row_coord
max_score = 0
col_coord = 0
row_coord = 0
do i = 1, cc
do j = 1, rr
if (matrix(i, j).GE.max_score) then
max_score = matrix(i, j)
col_coord = i
row_coord = j
end if
end do
end do
return
end subroutine
我想得到max_score、col_coord、row_coord,所以我导入了findthemax模块
(名为 findthemax.f90)是我用 f2py 改造的。
import numpy as np
matrix = np.array([[1, 10, 3, 4, 9],
[2, 1, 0, 9, 13],
[3, 5, 10, 18, 3]])
cc = len(matrix[:,0])
rr = len(matrix[0,:])
max_score, column_coord, row_coord = findthemax.findthemax(cc, rr, matrix)
我不知道为什么这不起作用,那是因为我实际上并不知道
如何使用 fortran 和 f2py 返回两个以上的值。有人可以告诉我如何
从 fortran 中获取多个值?
【问题讨论】:
-
如果您描述/给出确切的错误信息,而不是说这不起作用,其他人更容易帮助您解决特定问题,请参阅how to ask。正如您先前问题的answer 所示,您必须添加
import findthemax才能导入创建的f2py 模块。导入 f2py 模块后,您可能会发现仔细查看例如的输出非常有用。print(findthemax.__doc__)和print(findthemax.findthemax.__doc__),很多f2py的误解可以这样解决。