問題タブ [f2py]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - f2pyを使用する場合、fortranモジュール内の関数スコープは、fortranプログラム用にコンパイルされた場合と異なりますか?
私の問題は、f2py でコンパイルすると、一部のモジュール変数がモジュール内で定義された関数によって認識されないことです。エラーは、関数に渡される引数の変数型が宣言されている場所で発生します ( の型を記述する変数real
、または次元要素など)。gfortran でコンパイルすると、このエラーは発生しません。f2py でコンパイルした場合の違いと、これらのエラーを修正するにはどうすればよいですか?
サンプル ファイル にmoddata.f90
は、次のコードが含まれています。
そして私はコンパイルします
そして、私はこれらのエラーを受け取ります:
integer, parameter :: nelem=3
前に再定義しinteger, dimension(nelem), intent(in) :: y
て再コンパイルすると、
real(kind=dp)
各宣言で同じエラーが発生し、
dp
そのため、関数内でbyを再定義する必要integer, parameter :: dp = selected_real_kind(15)
があります。そして、それは機能します。
このモジュールを fortran ラッパーでコンパイルすると、これらのエラーは発生しません。なぜnelem
and dp
in the function が f2py で適切にスコープされていないのだろうか?
python - Fortran の単変量 Horner が NumPy の対応物よりも高速であるのに、二変量 Horner がそうでないのはなぜですか?
Pythonで多項式計算を実行したいです。polynomial
パッケージのnumpy
速度は私には十分ではありません。したがって、Fortran でいくつかの関数を書き直して、f2py
Python に簡単にインポートできる共有ライブラリを作成することにしました。現在、一変量および二変量の多項式評価のルーチンを、numpy
対応するものに対してベンチマークしています。
一変量ルーチンでは、ホーナーの方法を使用しnumpy.polynomial.polynomial.polyval
ます。numpy
多項式の次数が増えるにつれて、Fortran ルーチンが対応するルーチンよりも高速になる要因が増加することを観察しました。
二変量ルーチンでは、ホーナーの方法を 2 回使用します。最初に y で、次に x で。残念ながら、多項式の次数を増やすと、numpy
対応するものが追いつき、最終的に私の Fortran ルーチンを超えることがわかりました。numpy.polynomial.polynomial.polyval2d
私と同様のアプローチを使用しているため、この2番目の観察は奇妙だと思います。
この結果が、Fortran とf2py
. 二変量ルーチンが低次多項式に対してのみ優れているのに対し、一変量ルーチンが常に優れているように見える理由を誰かが知っているでしょうか?
編集これ が私の最新の更新されたコード、ベンチマークスクリプト、およびパフォーマンスプロットです:
多項式.f95
ベンチマーク.py (このスクリプトを使用してプロットを作成します)
結果
Steabert の提案に対するEDIT修正
上記のコードが x > 1 に対して悪い結果をもたらすことを確認するためのEDITテスト コード
python - Fortran ファイルを Python にインポートする
これは非常に初心者の質問ですが、Google でしばらく検索しても解決策が見つかりませんでした。Fortran 77 で記述されたいくつかのルーチンが必要な Eclipse (Linux Mint) を使用して Python コードを作成しています (コードは という名前のファイルにありますfortran_code.f
)。私はf2py
ファイルを取得するために使用しましたfortran_code.so
。このファイルは、Python コード ( ) と同じフォルダーにあります../workspace/python_project/src
。Python コードには以下のみが含まれます。
もう一度、結果は次のとおりです。
Fortran サブルーチン コードは次のとおりです。
.so ファイル (fortran_code.so) を取得するには、次を使用します。
f2py のバージョンは 2 で、Python のバージョンは 2.7.4 です。
この問題を解決するための助けは非常に役に立ちます。
ありがとう!
python - f2pyを使用するためのWinPythonのpythonパスの設定
Windows 7 のコピーに Winpython ディストリビューションをインストールしました。コピー先のフォルダー内から iPython コンソールやその他のアイテムをディストリビューションから起動すると、正常に動作します。
numpy の f2py モジュールを使用して、Python から Fortran サブルーチンを呼び出せるようにしたいと考えています。私の理解では、f2py はコマンド ラインから呼び出す必要がありますが、システムは f2py を見つけられないようで、ImportError: no module named site
フラグの有無にかかわらず呼び出すと戻ります。コマンドラインから python 自体を実行しようとすると、この同じエラーが返されます。
手動で Winpython ディレクトリ (例: C:\Users\AGK\WinPython-32bit-2.7.5.3\python-2.7.5
) に 移動し、f2py -c --help-fcompiler
そこに f2py があるかどうかを確認するために呼び出すと、次のエラーが表示されます。
このエラーの意味や、Winpython で f2py を使用する方法を説明してもらえますか? ありがとう!
python - f2py 停止コマンドの同義語
必要なときにいつでも Python から呼び出される Fortran コードがあります。Fortran の計算でエラーが発生する場合があり、これはコマンド STOP で処理されます。これにより、fortran コードと Python コードの両方が完全に停止します。ただし、実行を続けるには python が必要です。Fortran コードを停止しても Python に影響しない他のコマンドはありますか?
python - f2py 使用モジュール - 署名ファイル
モジュール dimpar を使用している署名ファイルを作成しました。署名ファイルを使用してコンパイルしようとすると、f2py は msects と maxpar を認識せず、結果として次のようになります。
これらのパラメータがモジュールからのものであることを f2py に理解させるにはどうすればよいですか?
ありがとう
署名ファイル:
モジュール dimpar :
問題を再現するためのサンプルコードを次に示します。
dimpar.f90
Array.f90
コンパイルしたら、次を実行します。