問題タブ [cython]
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.
c++ - cythonでのデフォルトパラメータの処理
cythonを使用していくつかのc++コードをラップしていますが、デフォルト値でパラメーターを処理するための最良の方法がわかりません。
私のc++コードには、パラメーターがデフォルト値を持つ関数があります。パラメータが指定されていない場合にこれらのデフォルト値が使用されるように、これらをラップしたいと思います。これを行う方法はありますか?
この時点で、オプションパラメータを提供するために私が見ることができる唯一の方法は、それらをpythonコードの一部として定義することです(以下のdef func
pycode.pyxのsatementで)が、デフォルトが複数回定義されていますが、これは望ましくありません。
cppcode.h:
pycode_c.pxd:
pycode.pyx:
python - Cythonを使用してメインのPythonプログラムをコンパイルする
Cythonを使用して.soファイルにコンパイルされたPythonモジュールをロードできるPython2.6プログラムがあります。Cythonを使用して.pyモジュールを.soファイルにコンパイルしましたが、すべて正常に動作します。
これは私がCythonで使用するsetup.pyファイルです:
したがって、Cythonを使用してPythonモジュールをコンパイルできることはわかっています(CythonはPythonファイルから「C」ファイルを作成してからコンパイルします)が、メインのPythonプログラムをLinuxプラットフォームで実行できるものにコンパイルできますか?もしそうなら、Cythonコマンドラインの例をいただければ幸いです。ありがとう。
python - Mac OS 10.6(python 2.6)へのpymssqlのインストール/ビルド
READMEとここhttp://code.google.com/p/pymssql/wiki/Compilationで説明されているように、Cython(v0.14.1)、FreeTDS(MacPortsを使用したv0.82)をインストールしましたが、すでにXCodeを使用しています。 gccでインストールされます。
ビルドエラーが発生しました: 、、、などのpython setup.py install
多くのエラーといくつかのエラーundeclared name not builtin:
strlen
PyMem_Malloc
PyMem_Free
PY_LONG_LONG
___ is deprecated, use 'cpython'
Googleは私にこのスレッドhttp://groups.google.com/group/cython-users/browse_thread/thread/468bb80480ede699/dc8267a4274c2413from libc.string cimport strlen, strcpy
を見つけました。ここで、誰かが最初のエラーに対処します(からに変更されfrom stdlib cimport strlen, strcpy
ました)。
今私は得ています:_mssql.pyx:650:34: Cannot convert Python object to 'const_char *'
これらの問題がhttp://code.google.com/p/pymssql/source/browse/tags/1.9.908/_mssql.pyxから発生しているファイルは次のとおりです。
私の質問:
間違ったことに対してシステムを正しく準備していない場合はどうなりpymssql
ますか?
また
ファイルが非推奨のインポートを使用している場合、_mssql.pyx
どうすれば修正できますか?
python - 異なるパッケージの依存関係を持つpyxファイルのコンパイル
異なるパッケージでcdef-ed型をコンパイルする際に問題が発生し、cythonのドキュメントで説明が見つかりませんでした。
Pythonsrcツリーのルートに次のsetup.pyがあります。
FragIdxは、flink / pytk / defs/FragIdx.pyxで定義されているcdef-edタイプです。
また、STK_idxはFragIdxの拡張であり、flink / pytk / Fragments/STK_idx.pyxで定義されています。
投稿の冒頭に記載されているsetup.pyを使用してコンパイルしようとすると、FragIdxは正常にコンパイルされますが、STK_idxに関しては、次のエラーメッセージが表示されます。
ソースツリーのルートディレクトリが$PYTHONPATHにリストされていることに注意してください。
誰かがこれに光を当てることができれば本当にありがたいです、どうもありがとう!
ダニエレ
c++ - Cython - コールバックの実装
私は、C++ で記述されたライブラリとのインターフェイスを試みるために、Cython を使用してきました。これまでのところ順調に進んでおり、ライブラリ内で MOST 関数を効果的に使用できます。私の唯一の問題は、コールバックの実装にあります。ライブラリには、次のような 4 つの関数定義があります。
したがって、それらを実装するには、cython で次のようなことを行うと考えました。
これは実際には正しくコンパイルされますが、コールバックが機能するように実際にそれを実装する方法を考えることができません。最初に、他の関数の場合と同様に、それを呼び出すだけの関数を作成しようとしましたが、次のようになりました。
しかし、それは私に(予測可能な)エラーを与えます:
「Python オブジェクトを 'Function1' に変換できません」
そうそう、それが私がいるところです。Cython でコールバックを設定した経験のある方がいらっしゃいましたら、よろしくお願いいたします。ありがとう。
編集:あなたのアドバイスに従って、次のようなcdefを使用して中間関数を作成しました:
これは私を手に入れたようです...もっと近くに?少なくとも今は別のエラーが発生しています:
今、私が知る限り、これらのタイプは同一であるため、何が起こっているのかわかりません.
Edit2 : 新しい typedef を宣言することでその問題を修正しました:
それを呼び出す引数として使用しますが、実際にはそれ以上近づいていないようですが、その関数を呼び出そうとすると、同じ「Pythonオブジェクトを「Function1」に変換できません"エラーが再び発生しました。
というわけで、ほぼスタート地点に戻ってきました。私が今できることは、そのような ac 関数として入ってくる python オブジェクトを明示的にキャストすることだけですが、正直なところ、どうやってそれを行うのかわかりません。
3番目を編集してください:さて、あなたの答えを分析した後、私はついにそれを手に入れました、そしてそれはうまくいきました。私がやったことは、次のような関数を作成することでした:
したがって、唯一の問題は const_ushort *data を python オブジェクトに変換できないことですが、それはまったく別の問題であるため、これは解決されたと思います。どうもありがとうございました。
python - Cython-配列へのポインターをPythonオブジェクトに変換する
さて、私はこれを味わうことができるようにこれを終えるのにとても近いです。過去数週間ほど、Cythonを介してC++で記述されたライブラリとインターフェイスするPython拡張機能を作成しようとしてきました。ここの人たちと数人の友人の助けを借りて、私はそこまでの道のりの98%のように感じるものをなんとか手に入れることができました。残っているのはこれだけです。署名されていないshortの配列へのポインターをPythonオブジェクト(できればリスト)に変換する方法を私は一生理解できません。
少し背景がありますが、コールバック関数を設定するライブラリの一部とインターフェイスしようとしています。これは、これで正常に実行されました。
この問題は関数「callcallback」内で発生し、「'const_ushort*'をPythonオブジェクトに変換できません」というエラーが表示されます。これを回避する最初の試みは、新しいpythonリストを作成し、ループして配列の各要素を次のようにpythonリストに入れることでした。
悲しいことに、これは、型を「const const unsigned short」として定義しようとしているコンパイル済みのcythonコードで私を悩ませますが、これは明らかに問題です。
それから私はこれを試しました:
これにより、「C配列の反復には既知の終了インデックスが必要です」と表示されます。私はC/C ++をほとんど知らないので、これのほとんどは私にはあまり意味がないことに注意してください。
それで、とにかく、そのようなポインタをpythonオブジェクトに変換する効果的な方法はありますか(通常は約57344アイテムであり、これは非常に時間に敏感なので、配列をループするよりも高速です)
編集:もう少し明確にすると、私はコールバックを使用しています。これを呼び出すライブラリ内のC ++関数は、「const uint_16」の配列へのポインターを送信します。そのため、const_ushortをそのように定義しました。そうしないと、型が統一されないためです。ライブラリを変更することはできません。
Edit2:わかったようです。私がしなければならなかったのは、const unsigned shortsの配列ではなく、unsigned shortsの配列として配列を明示的にキャストすることでした。これにより、非定数でインデックスを付けることができました。これを実現するために、私はこのような別のC ++関数を作成しました(他の誰かが私のためにそれを書いた、私はC ++をほとんど知らない):
これにより、クラス内に「 getindex 」関数を作成し、関数に基づいて正しい値を返すことができました。そうですね、Pythonは配列を正しく読み取っているようですが、そうではないので、このケースは閉じているようです。どうもありがとう。
python - 他の拡張機能との Cython インターフェース
Cython と純粋な python 拡張機能を一緒に使用することは可能ですか? GdkPixbuf ポインターを返す C 関数のラッパーが必要だとします。最終的な目標は、その関数を python で利用できるようにして、gtk.gdk.Pixbuf オブジェクトを返すことです。
python - cython setup.py は .dll の代わりに .o を与える
私はcythonの初心者なので、ここで明らかな何かが欠けている場合はご容赦ください。パフォーマンスを向上させるためにPythonで使用されるc拡張機能を構築しようとしています。関数の束を備えたfc.pyモジュールがあり、dsutilsを使用してwin64で実行しているcythonを介して.dllを生成しようとしています:
c:\python26\python c:\cythontest\setup.py build_ext --inplace
C:\Python26\Lib\distutils に dsutils.cfg があります。必要に応じて、disutils.cfg には次の構成設定があります。
私の startup.py は次のようになります。
コマンド ラインの出力は次のようになります。
ターゲット/ホスト amdwin64 タイプのビルド用の最新バージョンの mingw があります。win64用のpython26用のcythonの最新バージョンがあります。Cython は、エラーのない fc.c を提供してくれます。型変換に関するいくつかの警告のみが表示されます。さらに、.dll を提供する代わりに、fc.def ファイルと fc.o ファイルを生成します。エラーは発生しません。スレッドで、必要に応じて .so または .dll が自動的に作成されることがわかりましたが、これは発生していません。
c++ - 'ベクトルを変換できません'Pythonオブジェクトへ
c++関数を署名でラップしようとしています
Cythonを使用します。関数を含むファイルsieve.h、静的ライブラリsieve.aがあり、setup.pyは次のとおりです。
私のsieve.pyxで私が試しているのは:
しかし、この「'vector'をPythonオブジェクトに変換できません」というエラーが発生します。私は何かが足りないのですか?
解決策:OES関数からPythonオブジェクトを返す必要があります。
python - 他の Cython コードから自己定義の Cython コードを使用する
私は現在、Python プログラムを最適化しようとしており、関数呼び出しのオーバーヘッドを削減し、おそらく後で最適化された C ライブラリ関数を含めるために、Cython を使い始めました。
だから私は最初の問題に遭遇しました:
コードで構成を使用して、より大きなクラスを作成しています。これまでのところ、Python クラスの 1 つを Cython に変換しました (これはかなり困難でした)。コードは次のとおりです。
構成された Python/Cython クラスから class-method を呼び出しているcalculate
ため、構成されたクラスには次の (削減された) コードがあります。
メソッド/関数を Python と Cython から呼び出し可能にすることがわかりました。これは、事前cpdef
にタイプを定義しようとしない限り、素晴らしく機能します-ドキュメントによると (Early Binding For Speed)が必要です関数呼び出しのオーバーヘッドを取り除くために。次のことを試しましたが、うまくいきません。self.bendingForces
これにより、membraneClass.pyx
Cythonでビルドしようとすると、次のエラーが発生します。
宣言は 2 つの別々のファイルにあるため、これがさらに難しくなっていることに注意してください。
では、どうすればこれを実現できますか? 上記のリンク以外に、これに関する情報が見つからないため、誰かが私にポインタを与えることができれば非常に感謝しています.
よろしくお願いします!