問題タブ [cythonize]
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 - Cython: 型付き変数に INFINITY または numpy.inf を代入すると結果が 0 になる
他の場所でできるように、という名前のファイルcdef
にINFINITY
定数を入れたいと思います。私たちが持っていると仮定します:constant.pxd
cimport
constant.pxd
ただし、これは、たとえば別の.pyx
ファイルでは機能しません。
どちらが得られますか:
また、 orINF
として直接定義しようとしました。ただし、それらはすべてゼロになります。np.float32('inf')
np.inf
ただし、ファイルにINF = np.float32('inf')
入力せずに定義して、期待どおりに使用することはできます。これによりパフォーマンスの問題が発生する可能性があるかどうかはわかりません。.pyx
constant.pyx
そして:
python - Cython C++ ラッパーの未定義シンボル
cpp
で問題なくビルドできる作業中のプロジェクトがありますcmake
。今度は、同じための Python ラッパーを作成する必要があります。そこで、とcython
の間のギャップを埋めることにしました。C++
Python
CMakeLists.txt
ロジックをpyx
ファイルに記述する代わりに、ライブラリをcmake
それ自体でコンパイルし、後で Cython ラッパーをラップしてみました。setup.py
ファイルは次のとおりです。
call_core.pyx
ファイルは次のとおりです。
getVal()
ヘッダーファイル自体にメソッドを実装すると、このファイルは正常に機能します。しかし、実装を.cpp
ファイルに移動するとすぐに、Cython コンパイラーは次のエラーを表示します。
注: 上記のスニペットは、ファイルに実装されている関数に対して完全に機能し.h
ます。
python - 別のディレクトリにある Cython コンパイル モジュール
私はcythonの初心者です。
次のディレクトリ構造があります。
helloworld.py :
印刷名.py:
setup.py:
私が抱えている問題はpython setup.py build_ext --inplace
、cython_program
ディレクトリで使用してプログラムをコンパイルするときです。プログラムは正常にコンパイルさprintname.c
れ、lib フォルダーにファイルが生成されます。
しかし、printname.py と helloworld.py を別のフォルダーに移動して、cython でコンパイルされたコードが実行されていることを確認します。次のエラーが表示されます ImportError: No module named lib.printname
。
モジュール(lib.printname)もメインhelloworld.py
ファイルでコンパイルしないのはなぜですか?
注: helloworld.py と printname.py の両方を同じフォルダーに保持すると、これは正常に機能します。
前もって感謝します。
python - cython が 65535 より大きい数値の間違った値を出力する
cython の関数に 65535 より大きい値を渡した数値の奇妙な動作を認識しました。しかし、これはこれらの数値を関数に渡した場合にのみ表示されます。私がそれらを次のように定義すると
すべて正常に動作します。私の問題を明確にするために、この問題を調査するために使用した2つのダミー関数を渡します
そして、「.pyd」ファイルを取得するために呼び出された「setup.py」。
その後、コマンドで「.pyd」ファイルを作成しました
コマンドプロンプトを使用します。使用した c コンパイラは gcc です。
次に「bigNum1」または「bigNum2」のいずれかを呼び出すと、次の出力が得られます。
ご覧のとおり、bigNum2 を使用すると、65535 より大きいすべての数値が正しく表示されません。続いて、この関数の呼び出しを確認します。
私の問題を理解していただければ幸いです。私の推測では、bigNum2 で間違った宣言を行った結果、間違った型になったか、このメソッドに数値を渡す前に何らかの型キャストを行う必要があると思います。
編集:
これは、コマンド プロンプトの処理中に表示されるテキストです。
EDIT2:
cython 0.25.2に付属のWinpythonパッケージ「WinPython 3.6.1.0Qt5-64bit」を使用しています。しかし、最新バージョンを取得するために pip でアップグレードしました。
まず、ここのチュートリアルを使用して .pyd を取得しようとしました。
http://docs.cython.org/en/latest/src/quickstart/build.html
しかし、ビルド中に「エラー: vcvarsall.bat が見つかりません」というエラー メッセージが表示されました。そのため、gcc で Mingw を使用することにしました。ただし、これにより、この投稿で説明されているエラーも作成されました。
ValueError: 不明な MS コンパイラ バージョン 1900
そして、Indrajit Kanjilal の回答で解決しました。そして、私たちは今そこにいます。.pyd ファイルを作成して関数を呼び出すことはできますが、値が 65535 より大きい場合、エラーが発生します。それが役立つことを願っています。