Fortran コードを取得するために sympy - codegen を使用しようとしていました。解決策が見つからない厄介なことを除いて、問題なく動作します。私の例をこれに単純化しました:
bar = Matrix([x*x,y*z,z*y])
result = codegen(('foo', bar), 'f95', 'project')
結果は次のとおりです。
subroutine foo(x, y, z, out_6551735094710235777)
implicit none
REAL*8, intent(in) :: x
REAL*8, intent(in) :: y
REAL*8, intent(in) :: z
REAL*8, intent(out), dimension(1:3, 1:1) :: out_6551735094710235777
out_6551735094710235777(1, 1) = x**2
out_6551735094710235777(2, 1) = y*z
out_6551735094710235777(3, 1) = y*z
end subroutine
ルーチンの出力は 2 次元配列です。1 次元にする方法はありますか? この場合、2 番目の次元はとにかく 1 です。この例の C コードを生成すると、デフォルトで 1 次元のベクトルが得られます。なぜfortranの場合は違うのですか?
また、自動生成されたものではなく、このような場合の出力の名前を定義する方法は?