問題タブ [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 - distutils での F2py の使用
私はPythonスクリプト内でfortranプログラムを使用しており、setup.py
スクリプトを使用してビルドおよびインストールしようとしていますnumpy.distutils
. しかし、私はさまざまなコード ファイルをリンクする方法を熟知していないので、ここで質問して、各タイプのファイルをどうするかを誰かが明確に説明してくれることを願っています。
たまたま私の状況にかなり似ている仮説的な状況を説明しましょう。.so
Pythonでインポートできるファイルにしたいモジュールを含む2つのファイルがあります。それらがread.f90
(モジュールを含むread
) およびanalyse.f90
(モジュールを含む) であるとanalyse
します。これらのモジュールは両方とも、subs.f90
私が常に追加および更新している別のファイルで定義されているサブルーチンを使用します。モジュールは、ファイル内の別のモジュールにanalyse
も依存しています。これは、最初に調整する場合がありますが、基本的には、この後になる可能性が最も高いです。さらに、外部ライブラリにも依存します。produce
produce.f90
analyse
libfoo.a
これを機能させるには 2 つのレイヤーがあります。まず、f90 ファイルでuse
andステートメントが正しくなければなりません。include
次に、setup.py
ファイル内の拡張構成が正しくなければなりません。これまでのところ、外部ライブラリを機能させる方法を知っています - module analyse
、 put use foo
、および setup.py の Extension 関数で、キーワードを使用します
ただし、残りについてはわかりません。いくつかは機能していますが、最適な方法ではないようです。他の部分はまったく機能していません。誰かが何をすべきかを明確に説明できるかどうか疑問に思いましたか?
python - f2py 拡張機能を「import mymod.foo」としてインポートします
以下を使用して、Fortran ファイルから Python モジュールを作成しました。
file1.f90
Fortran モジュールが含まれています: foo
、bar
、bar
。モジュールには次のfoo
関数が含まれています: f
、g
、h
。
f2py は function の docstring を自動的に書き込みますf
。
mymod.so
はディレクトリROOT
に含まれており、自分の に追加ROOT
しましたPYTHONPATH
。
f
関数の docstring には次のようにアクセスできます。
f
sphinx の autodoc 拡張機能を使用して、関数のドキュメントを書きたいと思います。
しかし、それは失敗します:
スフィンクスは次のようにインポートしようとしていると思いますが、うまくいきません:
を含むパッケージをインポートしようとしました__init__.py
。
どうすればスフィンクスにmymod.foo.f
doctringを見つけさせることができますか?
python - Numpy distutils ハウツー
解決策を探すために 1 時間近くグーグルで検索しましたが、numpy.distutils のドキュメントは非常にまばらです。
f2py でラップされたモジュールがあります。基本的に次の 3 つのファイルで構成されます。
モジュールは、次のシェル スクリプト コマンドで適切にコンパイルされます。
その結果、python モジュール a.so ができました (名前は .pyf ファイルで指定されます)。
numpy.distutils (またはその他の Python 指向の構築ツール) を使用してこれを行うにはどうすればよいですか? あまり重要でない質問は、lib.a からの依存関係を含めることもできますか (必要に応じて再構築しますか?)
python - f2py の malloc エラー
f2py を使用して、3 次元で単純な統合問題を実行しようとしています。
fortran コードを呼び出すpython コードは次のとおりです。
fortran サブルーチンは少し長いですが、その重要な部分は最初の部分です...
そして終わり...
サブルーチンの先頭 (5 ~ 11 行目) のコメントは、fortran モジュールに存在する構造体ですmod_gvars
。このサブルーチンが戻るまで*すべてが計画通りに進んでいるようです。出力は次のとおりです。
サブルーチンが戻ったときにのみ問題が発生するようです。なぜこれが起こるのでしょうか?
python - f2py:Pythonとのインターフェース時に、Fortranで実際の精度を指定しますか?
私はf2pyで遊んでいます。numpyの組み込み型とFortran90型について少し混乱しています。Pythonと対話する場合、Fortran90では単精度実数しか使用できないようです。例を挙げて説明しましょう。
このFortran90モジュールtest.f90をf2pyでコンパイルし、Pythonにインポートするとします。
そして私はこのようにコンパイルします:
f2py -c -m test test.f90
次に、Pythonで:
IOW、f2pyは倍精度を受け入れないようです。これは、PythonからFortran90サブルーチンに入力を渡すときにさらに問題になります。モジュールを次のように拡張するとします。
f2py -c -m test test.f90
Python
-1.15948430791165406E + 155
したがって、Pythonから送信される入力変数は、単精度で宣言する必要があるようです。これはf2pyの既知の問題ですか?
また、フォローアップの質問として:spからdpへの変換は、次の意味で機能します。
しかし、これはコンパイラ固有のものなのだろうか?上記のサブルーチンが、任意のアーキテクチャの任意のコンパイラで正しいことを実行することを期待できますか?テストするとき、私は上記のすべての例でgfortranを使用しました。
python - 配列の順序付けによる f2py の速度
f2py
純粋な Python で実行するのは非常に面倒な計算量が多いため、速度を上げるためにfortran ( ) でいくつかのコードを書いています。
Python で NumPy 配列を設定order=Fortran
すると、従来の C スタイルの順序に関してメインの Python コードが遅くなるかどうか疑問に思っていました。
python - Red Hat への SciPy のインストール
Red Hat Enterprise Linux Server リリース 6.3 に SciPy パッケージをインストールしようとしています。しかし、それは失敗しています。
私が使用している Python のバージョンは 2.6 ですが、2.4 が必要なようです。2.6 と互換性のある SciPy の別のバージョンはありますか? 2.4 が必要な場合、それを取得する方法について何か提案はありますか? Python Webページの指示に従いましたが、時代遅れのようです。f2py も必要ですが、入手方法がわかりません。
簡単にインストールするための提案はありますか? ここの指示に従っていました。
ありがとう!
python - Python で fortran コードを呼び出すとき (f2py など)、グローバル変数をどのように処理しますか?
Python でいくつかの Fortran コードを実行したいのですが、そのためにf2py -c -mを使用しています。ただし、FUNCTIONのみが.soファイルにパックされ、 PROGRAMにはパックされないようです。では、グローバル変数をどのように扱うことができますか? たとえば、変数cはモジュールに入れられます
、PROGRAM で変更され、同じファイル内の FUNCTION によって暗黙的に使用されます
関数y(x)に Pythonのcの値を知らせるにはどうすればよいですか?
function - fortran 関数を呼び出す f2py サブルーチン
別の Fortran 関数を呼び出している Fortran 関数を呼び出す Fortran f2py サブルーチンを作成することは可能ですか? 例えば:
混乱して申し訳ありません。試してみましたが、コンパイル中にエラーが発生します... Python から呼び出す必要がある唯一のサブは最初のサブです。よろしくお願いします。
python - PythonとFortranの友達を作る
Pythonプログラムでいくつかの値を返すfortran関数を呼び出す必要があると仮定します。私はそのような方法でFortranコードを書き直すことを知りました:
そしてそれをPythonでそのような方法で呼び出します:
作業結果が得られます。他の方法でFortran関数を呼び出すことはできますか?最初の方法は少し不器用だと思いますか?