私はcythonの実際の動作を理解しようとしています。一番最初、私はCythonを使用して生成されたCコードのC関数を確認します。
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize("test.pyx"))
後、私のようにコマンドラインからtest.pyxを実行し、setup.pyファイルにこのコードをラップし、
import numpy as np
a=2;b=3;
np.sum(a,b)
np.subtract(a,b)
を含むtest.pyxファイルを書かれています、
python setup.py build_ext --inplace
このコマンドは、test.cコードを生成します。生成されたCコードは本当に大きく、理解するのが難しいです。ここで、np.sum(a、b)の実装がどこにあるか知りたいだけです。もし私がPythonをC言語に翻訳したのであれば、の和関数を他のCコードの独立関数として使うことができます。この関数には、それに沿ってコピーする必要のある依存関係がありますか?
良い回答を楽しみにしています。
ご意見ありがとうございます。私は何を参照してくださいhtmlファイルを見た後のように見える、
+06: import numpy as np
__pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 6, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
これは__pyx_n_s_numpyモジュールを呼び出していることを意味します。 Cコンパイラはどのようにしてこのモジュールを実行できますか?私はこのモジュールの実装が.py形式であると思います。
1)あなたのCythonコードは 'numpy.sum'のコードを生成しません。単に既存の関数を呼び出します。 2) 'cython -a filename'を呼び出すと、CythonコードがどのようなCコードに変換されるのかを示すアノテートされたhtmlが得られます。 – DavidW