問題タブ [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でラップされたC関数はゼロのみを返します
f2pyを使用して単純なC関数をラップしようとしています。正常にコンパイルされますが、関数はゼロのみを返します。私はCの初心者なので、そこでばかげた間違いを犯すことは間違いありません。
たとえば、cファイルは次のとおりです。
pyfファイル:
python - f2pyでfortranモジュールを使用すると、ipythonとipythonノートブックの奇妙な精度の違い
f2py でコンパイルされた fortran モジュールを使用すると、ipython と ipython ノートブックの間で奇妙な精度の違いが発生します。
私のFortranモジュールは次のとおりです。
コンパイル:f2py -c -m andre tt.f90
ipythonで私は得る:
これが望ましい出力です。ただし、ipython ノートブックで同じコードを使用すると、次のようになります。
私は何を間違っていますか?
python - Pythonおよびf2pyエラー - NameError:グローバル名「inputUtil」が定義されていません
f2py (inputUtil.pyd) を使用して Python で Fortran コードをコンパイルしました。この関数をメインの Python コードにインポートし、文字列から 2 つの文字 (locationAID と locationBID) をこの関数に渡します。
エラーメッセージは次のとおりです。
これが私のメインのpythonコードの一部です:
以下は、f2py を使用して Python に変換した fortran コードの一部で、この関数に渡される文字を示しています。
f2py はうまく機能したので、それは問題ではないと思います。私はPythonを学んでいます-私は昔のFortranプログラマーです(パンチカードの日にさかのぼります!)。ですから、オッサンが従うことができる何かで応答してください。
助けてくれてありがとう。
パンチダディ
python - f2py 機能リリース GIL
f2py でラップされた関数を呼び出すと、グローバル インタープリター ロック (GIL) が解放されますか?
(私は自分で発見しようと喜んでいますが、どこから探し始めるべきかを知るには、でこぼこしたソースに精通していません)...
明確にするために、この質問に対する適切な回答は、numpy ソースのどこで a を探すべきかを知るのに役立つか、GIL がリリースされたPy_BEGIN_ALLOW_THREADS
かどうか (できればいくつかの証拠がある場合) を知らせてくれます。
python - f2py を介した Python への Fortran 拡張: プロファイルを作成するには?
f2py (Ver. 2) でコンパイルされた Fortran (gfortran 4.4.7) で記述された Python (2.7.2) の拡張機能を使用しています。
を使用して Python 部分をプロファイリングできますcProfile
が、結果から Fortran 関数に関する情報が得られません。代わりに、時間は Fortran 関数を呼び出す Python 関数に起因します。
ビルドするすべての Fortran オブジェクトに対して "-pg -O" フラグを有効にしました。また、次の方法で共有オブジェクトを作成する f2py 呼び出しでもf2py --opt="-pg -O"
...
Fortran 情報を取得する方法についてのヒントも大歓迎です。
誰かが別のプロファイラーで同様のセットアップを使用している場合、私も興味があります。
numpy - Windows で f2py を使用して 64 ビット Python 拡張機能をビルドする
f2py.py
Numpy のスクリプトを使用して、Fortran ソースから Python 拡張機能を構築しようとしています。http://www.scipy.org/F2PY_Windows ( web archive )の手順に従っています。私のシステムは Windows 7 64 ビットで、主に Python 2.7.3 [MSC v.1500 64 ビット (AMD64)] を使用しています。私はhttp://www.lfd.uci.edu/~gohlke/pythonlibs/#numpyから Numpy-MKL 1.7.1 を持っています
これが私が試したことです:
- Fortran コンパイラを選択します。64 ビットの Python を使用しているため、64 ビットの Fortran コンパイラが必要です。MinGW-w64から、いくつかの個人用ビルドを試しました。
- 新しい
cmd.exe
シェルを開き、GCC コンパイラを抽出した場所へのパスを編集します。set PATH=%PATH%;c:\gnu\mingw64\bin
set C_INCLUDE_PATH=C:\gnu\mingw64\include
f2py.py
次のコマンドでビルドを試してください。C:\Python27\python.exe C:\Python27\Scripts\f2py.py -c --fcompiler=gnu95 --compiler=mingw32 -lmsvcr90 -m foo foo.f90
出力は次のとおりです ( でノイズ ラインを削除<--snip-->
)。
これを初めて実行すると、次の 3 つの新しいファイルがビルドされることに注意してくださいC:\Python27\libs
。
libmsvcr90.a
libpython27.a
python27.def
他に何かインストールする必要がありますか? に他のオプションを提供する必要がありますf2py
か? より一般的に言えば、GNU コンパイラから MSVC ビルド Python の拡張機能をビルドすることは可能ですか?
python - f2py: モジュール内の定数の奇妙な動作
Fortran モジュールでグローバル定数を操作しているときに、f2py の奇妙な動作を発見しました。
次のようなファイルtest.f90があるとしましょう
これを f2py でラップすると、
そして走っている
私は得る
これはあなたが期待するものです。real ステートメントと real*8 ステートメントはどちらも同じように動作します。
私の実際のプロジェクトでは、倍精度の明示的な使用を指定して、コンパイラ フラグを使用して Fortran コードをコンパイルする必要があります。Fortran では、これで問題なく動作します。上記のコードを次のようにコンパイルすると
私は結果として得ます
これは実際には奇妙です。最初のケースではグローバル変数は初期化されず、値はゼロです。これはバグですか、それとも f2py で倍精度の明示的な処理を指定する別の方法がありますか?