問題タブ [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 - Fortran からのコールバック Python
現在f2py
、Fortran コードから Python 関数を呼び出すために を使用しています。非常に簡単な例を試しましたが、うまくいきませんでした。
Fortran90 コード:
コマンドラインを使用:
f2py -c -m コールバック callback.f90
Python コード:
エラー:
python - f2py を使用した Photran プロジェクトのビルド
Python から Fortran 関数を呼び出せるようにするために、f2py を使用して Fortran プロジェクトをビルドするように Photran をセットアップしようとしています (記録としては PyDev で)。外部ビルダーをセットアップしようとしましたが、うまくいきませんでした:
これはエラーで失敗しますerror: unknown file type '' (from 'D:\workspace\FortranTDDexample')
これは最善の方法ではなく、ビルド構成の方が適していると思います (私はこれに非常に慣れていません)。
だから私の質問は:
1) Photran と f2py の動作設定を文書化した人はいますか?
2) 外部ビルダー (上記) を機能させる方法はありますか?
numpy - f2py: Windows の numpy に limit.h ファイルがありません
f2py と g77 コンパイラを使用して一部の FortranIV コードをコンパイルできません。Fortran で記述された非常に古いコードを既存の Python モジュールに呼び出すために、これを行う必要があります。MinGW を介して gcc をインストールしましたが、違いがあるかどうかはわかりません。Numpy 1.7 と SciPy 0.12 で Python 2.7 も実行しています。私の OS は Windows7 x64 ですが、すべてのインストールが 32 ビット バージョンであることを確認しました。Python、Fortran、およびこのフォーラムは初めてなので、ご容赦ください。f2py でコードをコンパイルすると、次のようなエラーが表示されます。
問題を特定するために、gfortran コンパイラと互換性のあるテスト コードを使用しました。「-c –compiler」を使用して、必要なコンパイラを呼び出します。テストは、基本的な「Hello World」と同じ行にあります。スローされるエラーは、実際のコードとテスト コードで同じです。エラーのあるファイル 'npy_common.h' を調べたところ、291 行目でヘッダー limit.h をインクルードする呼び出しが行われていることがわかりました。エラーは Numpy ライブラリで発生するので、エラーは Numpy にあると思いますか? このエラーが発生する理由がわかりません。
python - f2pyを使用してfortranサブルーチンからpythonにテキスト文字列を返す
Fortran でこの単純なモジュールを取得しました。
test.f90 :
それを(Windows上で)コンパイルしてgfortran test.f90 -o test.exe
実行すると、予想どおり、次のようになります。
f2py を使用してコンパイルすることもできます。c:\Python27\python.exe c:\Python27\Scripts\f2py.py --fcompiler=gnu95 --compiler=mingw32 -c -m test \test.f90
この Python スクリプトを実行すると:
test.py :
次の出力が得られます。
ご覧のとおり、"foo" になるはずの文字列が空です。どうしてこれなの?
python - f2py、Python 関数を Fortran に渡す際の問題
この単純な Fortran コード ( stack.f90
) があります。
私が使用してコンパイルしています:
次に、この Python スクリプトを使用してテストします ( stack.py
):
それを使用して実行すると、次の"python stack.py"
ようになります。
私の質問は次のとおりです。
関数が正しく評価されないのはなぜですか?
result
Pythonに戻るには?xs
Fortranで一度に配列を評価することは可能ですか?
ありがとうございました!
EDIT:@SethMMortonからの素晴らしいヒントで、私は次のようになりました:
stack.py
このコマンドを変更して実行: ans = fortran_sum(func,xs)
; 与えます:
これは間違っています。x=x(I)
中間変数を追加し、この変数を使用して関数を呼び出すと、この奇妙な動作は発生しませんf(x)
。面白いことに、f(x)
一度電話すると、目的の電話f(x(I))
も機能します。この「FIX」を適用した後:
次に、コンパイルして実行すると、正しい結果が得られます。
誰かが理由を説明できればいいのですが?
python - f2py、配列を返す Python 関数 (ベクトル値関数)
次の Python では、返された配列に含まれる 5 つの関数func
を統合する必要があります。このコードは、以下を使用して生成された外部 Fortran モジュールを呼び出しますf2py
。
Fortran ルーチンは次のとおりです。
問題は、Fortran が最初の関数のみを に統合していることですfunc(x)
。印刷結果を参照してください。
One way to workarond that is to modify func(x)
to return the value of a given
position in the array of functions:
And then change the Fortran routine to call the function with two parameters:
Which works:
But here func
is called 5 times more than necessary (in the real case func
has above 300 functions, so it will be called 300 times more than necessary).
- Does anyone know a better solution to make Fortran recognizes all the array returned by
func(x)
? In other words, make Fortran buildfx1 = f(x1)
as an array with 5 elements corresponding to the functions infunc(x)
.
OBS: I am compiling using f2py -c --compiler=mingw32 -m trapzdv trapzdv.f90
python - f2pyを使用して(Fortran)モジュールエラーでPythonコードを停止しますか?
を使用して Fortran で Python モジュールを作成していf2py
ます。Fortran モジュールでエラーが発生した場合、Python プログラムでエラー (エラー メッセージを含む) を生成したいと考えています。次の例を検討してください。
Fortran コード (test.f):
この非常に単純なプログラムは1
、 の各要素に追加しますa
。a(i)
ただし、ゼロに等しい場合はエラーが発生するはずです。付属の Python コード:
出力は次のとおりです。
しかし、私は Python プログラムがエラーを保持することを望んでいます。助けてください。
答え
Fortranのstop
コマンドはまさにこれを行います。更新された Fortran コードを考えてみましょう。
出力は次のとおりです。
つまり、エラーの後、Python コードは続行されません。