2

私はプログラミングが初めてで、python プログラムを実行して ac プログラムと通信する方法を知りたいと思っていました。私はPythonで数学計算を行っていますが、主な計算をCで書き上げることができるかどうか疑問に思っていました。そうすれば、計算がより速く実行されます。「Python から C 関数を呼び出す」、「Python コードに C または C++ コードを直接含める」、「Python から C ライブラリを使用する」について読んでいます。これは同じことですか?python プログラムで ac プログラムを実行し、結果を受け取りたい。

Pythonから「Cライブラリ関数を呼び出す」とはどういう意味ですか? Pythonスクリプトがcライブラリを使用できるようにするか、スクリプトがacコンパイラ内でコードを実行できるようにしますか?

ありがとう

4

4 に答える 4

4

これを行う最も簡単な方法の 1 つは、Cythonを使用することです。Python に非常に近いコードを書くことができますが、C にコンパイルされます。これにより、一部のコード (特に数値計算) がはるかに高速になります。Cython を使用して Python から C ライブラリ関数を簡単に呼び出すこともできますが、ctypes でも​​十分です。

ただし、実際に特定の C プログラムを実行したい場合は、Subprocessを使用して実行できます。注意: これは、C ライブラリまたは Cython 関数を直接呼び出すよりも (はるかに) 遅くなります。

于 2012-07-10T19:06:35.563 に答える
2

「配列操作」を処理するときにかなり高速なnumpyもあります(ベクター操作と呼ばれることもありますが、その用語はSIMD用語と混同しています)。cython ルートに進むことにした場合は、おそらく numpy が必要になるため、アルゴリズムがそれほど複雑でない場合は、最初に numpy だけで十分かどうかを確認することをお勧めします。

ここで取ることができる 2 つの異なるルートがあることに注意してください。使用できますsubprocessこれは基本的に、作成した他のプログラムにシステム コールを発行します。新しいプロセスを開始してデータをプロセスに送信し、プロセスからデータを読み戻す必要があるため、これは低速です。つまり、データは呼び出しごとに複数回複製されます。2 番目のルートは、Python から C 関数を呼び出すことです。Cpython (参照および最も一般的な python 実装) は C で記述されているため、C 拡張機能を作成できます。これらは基本的に、特定の API に準拠するコンパイル済みライブラリです。次に、Cpython はそれらのライブラリをロードし、内部の関数を使用して、データへのポインターを渡すことができます。この方法では、データは実際には複製されません。C で使用しているのと同じメモリ ブロックを Python で使用しています。ここでの欠点は、C API が少し複雑であることです。それか' サードパーティの拡張機能と既存のライブラリ (numpy、cython、ctypes など) が入る場所。それらはすべて、C API について心配することなく、C 関数に計算をプッシュするさまざまな方法を備えています。Numpy はループを削除するため、配列をすばやく加算、減算、乗算できます (他の多くのことの中でも)。 CythonPythonコードをCに変換し、コンパイルしてインポートできます-通常、ここで速度を上げるには、cythonが生成されたコードを最適化できるようにする追加のヒントを提供する必要がありctypesます.C関数プロトタイプを再指定する必要があるため、少し壊れやすいです.それ以外の場合は、ライブラリを共有オブジェクトにコンパイルできる限り、非常に簡単です...リストは続く可能性があります。

また、numpy を使用していない場合は、pypy を確認してください。Cpython よりも高速に Python コードを実行できると主張しています。

于 2012-07-10T19:15:02.320 に答える
0

ctypesが必要です。クレイジーな拡張機能なしで、Python から C 関数を直接実行できます。もちろん、時期尚早に最適化していないことを確認する必要があります。Python の数学関数は非常に高速です。

ctypes モジュールを使用すると、C ライブラリ関数を Python コードから直接呼び出すことができます。つまり、Python がアクセスできる場所にコンパイル済みのライブラリをドロップして、コンパイル済みの関数を実行できるということです。これは、コンラッドが指摘したように、サブプロセスで実行できる Python から C プログラムを呼び出すことと同じではありません。もちろん、subprocess は C で書かれたプログラムを必要としません。任意の実行可能ファイルを実行できます。

于 2012-07-10T19:05:32.840 に答える