Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将(7,3,3,3)数组传递给fortran子例程?_Python_Arrays_Numpy_Fortran_F2py - Fatal编程技术网

Python 如何将(7,3,3,3)数组传递给fortran子例程?

Python 如何将(7,3,3,3)数组传递给fortran子例程?,python,arrays,numpy,fortran,f2py,Python,Arrays,Numpy,Fortran,F2py,我已经通过f2py命令编写了一个fortran子例程,以便在python中使用 子例程的形状为numpy ndarray(7,3,3,3)。该数组由7个立方体组成,大小为3x3。我还将整数7和3传递给子例程 这是密码 subroutine fit(n, m, a) c =================================================================== c ArrayTest

我已经通过f2py命令编写了一个fortran子例程,以便在python中使用

子例程的形状为numpy ndarray(7,3,3,3)。该数组由7个立方体组成,大小为3x3。我还将整数7和3传递给子例程

这是密码

        subroutine fit(n, m, a)

c ===================================================================
c                            ArrayTest.f
c ===================================================================
c       n            - number of cubes being passed
c
c       m            - edge of cube size
c
c       a(n,m,m,m)   - array of shape (n,m,m,m)
c
c ===================================================================

        implicit none
        integer m
        integer n
        double precision a(n,m,m,m)

        end subroutine fit
这只是为了看看我是否能通过数组。当我从python编译并调用它时,我得到以下错误

import ArrayTest as AT 
import numpy as np

n = 7
m = 3
a = np.ones((n,m,m,m))

AT.fit(n, m, a)
投掷

ArrayTest.error: (shape(a,0)==n) failed for 1st keyword n: fit:n=3

我不知道发生了什么事。在fortran中将数组定义为a(m,m,m,m)不会引发任何问题,只有当我尝试从两个整数定义它时,它才会导致问题,即使我同时设置了m=n=3。如何将我的(7,3,3,3)数组传递给fortran子例程?

看看f2py创建的Python函数的docstring:

fit(a,[n,m])

Wrapper for ``fit``.

Parameters
----------
a : input rank-4 array('d') with bounds (n,m,m,m)

Other Parameters
----------------
n : input int, optional
    Default: shape(a,0)
m : input int, optional
    Default: shape(a,1)
f2py认识到
n
m
描述了
a
的形状,因此不是Python函数的必需参数,因为可以通过检查numpy数组的形状找到它们。因此,它们是Python函数的可选第二和第三个参数
fit

In [8]: import ArrayTest as AT

In [9]: n = 7

In [10]: m = 3

In [11]: a = np.zeros((n, m, m, m))

In [12]: AT.fit(a, n, m)

In [13]: AT.fit(a)

非常感谢,称fit(a,[n,m])非常有效。我想在这种情况下,f2py比我更聪明!嗨,沃伦,我遇到了类似的问题子程序sdk(a,nx,ny,nz,axis,nsd,sdkrt)双精度,维度(nx,ny,nz),意图(in)::整数,意图(in)::nx,ny,nz,axis,nsd双精度,维度(nsd),意图(out)::sdkrt做一些事情===如果我用(nx,ny,nz)调用它,我会得到与Adam相同的错误。然而,如果我跳过nx、ny、nz(因为它们是可选的),我会得到分段错误。你对如何调试这个有什么建议吗?谢谢