問題タブ [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.
python - cythonでコンパイルするときにpythonアサーションを削除するには?
だから、ここに私の問題があります:私はPythonでコードを書いていますが、遅すぎるコードの一部でパフォーマンスを改善する必要があります。良い(そして簡単な)解決策はcythonを使用しているようです。試してみたところ、良い結果が得られました。問題は、Python コードで assert ステートメントを使用していることです。cython を使用する前に、-OO オプションを使用して Python コードをコンパイルできたので、アサーション テストを実行しないバージョンを提供でき、デバッグ用のアサートを保持できました。しかし、cython でコンパイルされたファイルは常にアサートを実行するようです。アサーションを削除する (または削除しない) ために cython コンパイルに渡すことができるいくつかのオプションはありますか?
python - Cython でラムダ関数を使用するとエラーが発生する
Cython を使用してコードを高速化しようとしています。ラムダ関数を使用すると、Cython で「識別子またはリテラルが必要です」というエラーが表示されます。私が知る限り、ラムダ関数は Cython 0.13 でサポートされる予定です。この点で私は間違っていますか?それらが実際にサポートされている場合、それらを実装するためにここにあるもの以外に何かする必要がありますか?
python - cython を使用してモジュールを python 3.1 に移植する
任意のモジュールを cython にインポートし、それらを共有オブジェクト ファイルにコンパイルしてから、Python 3.1 で使用することは可能ですか?
この理由は、内部の python 3.1 インタープリターを持つプログラム「blender」の拡張機能を作成しているためです。しかし、まだ 3.x に移植されていない python-modules も利用したいと思います。
私は特に numpy を頭に入れています(ただし、他のライブラリもいくつかあります)。numpy を利用するモジュールがあります。私はそのモジュールを再配布したいので、人々が自分のマシンに numpy をインストールすることを望んでいません。それはうまくいくでしょうか?
python - C 関数で Numpy を拡張する
Numpy コードを高速化しようとしていますが、コードがほとんどの時間を C で費やしている特定の関数を実装したいと決めました。
私は実際にはCの新人ですが、行列のすべての行を正規化して合計が1になる関数を書くことができました.コンパイルでき、(Cで)いくつかのデータでテストしましたが、それは私が望むことを行います. その時点で、私は自分自身をとても誇りに思っていました。
今、私は 2d-Numpy 配列を受け入れる必要がある Python から素晴らしい関数を呼び出そうとしています。
私が試したさまざまなことは、
SWIG
スイグ +
numpy.i
ctypes
私の関数にはプロトタイプがあります
したがって、可変長配列へのポインタを取り、その場で変更します。
次の純粋な SWIG インターフェイス ファイルを試しました。
次に、(Mac OS X 64ビットで)次のようにします。
Python では、モジュールのインポート時に次のエラーが発生します。
次に、SWIG + を使用してこのアプローチを試しましたnumpy.i
。
ただし、これ以上のことはできません。
SWIG は で定義された typemaps を見つけられないようですが、同じディレクトリにあり、SWIG が見つからないと文句を言わないnumpy.i
ため、その理由がわかりません。numpy.i
ctypes の場合、私はそれほど遠くまでは行きませんでしたが、2 次元配列を渡して結果を返す方法がわからなかったので、すぐにドキュメントで迷子になりました。
それで、誰かが私の関数を Python/Numpy で利用できるようにする魔法のトリックを教えてくれませんか?
python - ctypes, pyrex, swig, or cython for this problem?
I have about 20 simple C++ classes that represent various probability distributions. I would like to make these available in Python. What is the easiest way to do this? I don't mind having a program automatically generate wrappers, but I don't want to retype the classes.
Also, some of my classes use Boost uBLAS libraries. Is there a way to automatically pass in numpy arrays from Python?
python - Cython、C、および Fortran
C関数からfortran関数を呼び出す方法について教えてください。これらの C 関数は、cython を介して Python コードで使用されます。まとめると、次のスキームがあります。
Cython モジュール -> C 関数 -> Fortran、ここで -> は「呼び出し」を意味します。
現在、cython から C 関数を呼び出すことはできましたが、fortran 関数を呼び出すのに苦労しています。助けてもらえますか? (簡単な例でいいでしょう)。
前もって感謝します。編集: gcc 4.1.2 を使用しています。そしてグフォルトラン
python - Cでnumpyを拡張するときに列連続配列を考慮する方法
対数空間で配列の行を正規化する C 関数があります (これにより、数値のアンダーフローが防止されます)。
私のC関数のプロトタイプは次のとおりです。
配列へのポインターを受け取り、その場で変更することがわかります。もちろん、C コードは、データが C 連続配列、つまり行連続として保存されることを前提としています。
Cython を使用して次のように関数をラップします (インポートとcdef extern from
省略):
ほとんどの場合、numpy-arrays は行が連続しており、関数は正常に動作します。ただし、numpy-array が以前に転置されている場合、データはコピーされず、データへの新しいビューだけが返されます。この場合、配列が行に連続していないため、関数は失敗します。
これを回避するには、配列を Fortran 連続順序で定義して、転置後に C 連続になるようにします。
明らかに、これは非常にエラーが発生しやすく、ユーザーは配列が正しい順序になっていることに注意する必要があります。これは、ユーザーが Python で気にする必要のないことです。
行と列が連続する配列の両方でこれを機能させる最善の方法は何ですか? Cython でのある種の配列順序チェックが進むべき道だと思います。もちろん、データを新しい配列にコピーする必要のない解決策が望ましいと思いますが、それは必要だと思います。
python - Cython バイトから C char*
Python 3 で使用できるように、CPython に Cython 拡張機能を記述して mcrypt ライブラリをラップしようとしています。
失敗しているコードは次のとおりです。
ここで、Cython のドキュメントを理解しているように、3 行目の割り当ては、バッファーの内容 (Python 3 のオブジェクト) を C 文字列ポインターにコピーする必要があります。これは、メモリを割り当てることも意味すると思いますが、この変更を行ったとき:
それはまだセグメンテーション違反でクラッシュしました。mcrypt_generic の内部でクラッシュしていますが、プレーンな C コードを使用すると問題なく動作させることができるため、Cython がここで C データをどのように処理しているかについてよく理解していないことがあるはずです。
助けてくれてありがとう!
ETA : 問題は私の側のバグでした。私はあまりにも多くの時間起きていた後にこれに取り組んでいました (それは私たち全員がある時点で行ったことではありませんか?) と、何かばかげたことを見逃していました。私が今持っているコードは次のとおりです。
暗号化を行うためのコピーを作成し、次に戻り値への 2 番目のコピーを作成するため、これはおそらく世界で最も効率的なコードではありません。ただし、それを回避できるかどうかはわかりません。新しく割り当てられたバッファを取り、それをバイト文字列としてインプレースで Python に返すことができるかどうかわからないからです。しかし、機能する機能ができたので、ブロックごとの方法も実装して、暗号化または復号化のために反復可能なブロックを提供し、ソース全体がなくても実行できるようにします一度にすべての宛先をメモリ内に保存する---そうすれば、任意の時点で最大3つのコピーをメモリに保持することを心配することなく、巨大なファイルを暗号化/復号化できます...
助けてくれてありがとう、みんな!
c - Cython は 3 項スタイルの if ステートメント (if ? then : else) をサポートしていますか?
(if ? then : else)
C/C++ でのフォーマットの専門用語を忘れてしまいました。また、この構文は Cython (Python の C バリアント) でサポートされていますか?
Cython がこの機能をサポートしているかどうかを調べられるように、技術名を知る必要があります。
更新: Cython がこれをサポートしているかどうか知っている人はいますか?
解決策: cython/python では、これ(b if a else c)
は(a ? b : c)