問題タブ [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 - Cythonic 警告を発していますか?
Cython では、通常のraise
キーワードは、Cython ソース ファイルの行と名前への参照を含む C コードを発行し、有用なエラー メッセージを生成できるようにします。
ただし、警告については何も見ていません。呼び出すだけでwarnings.warn
は、インタープリターは警告がどこから来たのか混乱したままになります。pyxファイルPyErr_WarnExplicit
のマクロに似たものがあれば使えます。__LINE__
警告を発行する標準的な方法、または Cython で pyx の行番号を参照する標準的な方法はありますか?
アップデート
この質問は何ヶ月も開かれているので、Cython には現在警告を発する良い方法がないとしか思えません。誰かがこれを正しく機能させる方法を見つけたり、パッチを提出したりした場合に備えて、ここで開いたままにします。
python - Cython コードが機能しない
私はいくつかのPythonコードを書きましたが、「python」を使用するとうまくいきました。次に、「Cython」を使用してCに変換し、distutilsを使用して共有ライブラリにコンパイルしました。次に、コードの一部を Cython に変更して、より高速に実行できるようにしました。しかし、.so モジュールをインポートして、「cdef」したコマンドを使用しようとすると、コマンドが存在しないと表示されました。元のコード:
新しいコード:
「cdef int time」を使用してみましたが、同じ結果が得られました。何かアドバイス?
python - Cythonスピードブーストとユーザビリティ
Pythonコードを最適化する方法を探していたときに、Cythonに出くわしました。私はStackOverflow、python wikiのさまざまな投稿を読み、「最適化の一般的なルール」の記事を読みました。
Cythonは私の興味を最もよく理解するものです。自分でCコードを作成する代わりに、Pythonコード自体に他のデータ型を含めることを選択できます。
これが私が試したばかげたテストです、
$ time python test.pyx
$ time cython test.pyx
今、正直なところ、私は唖然としています。ここで使用したコードは純粋なPythonコードであり、変更したのはインタープリターだけです。この場合、cythonがこれほど優れているのなら、なぜ人々は従来のPythonインタープリターをまだ使用しているのでしょうか。Cythonに信頼性の問題はありますか?
python - Python:ネイティブ ライブラリに依存する pyx の pyximport
私のpyxはネイティブライブラリに依存しています
どうすればできpyximport.install()
ますか?pyxinstall の自動ビルドはネイティブ ライブラリとのリンクを認識しないため、ビルドは失敗します...
python - Cythonの64ビット整数
Cythonを使用してC++ライブラリ(pHash)をPythonとインターフェイスさせようとしていますが、一部のタイプで問題が発生します。ライブラリ関数は「unsignedlonglong」を使用しており、このタイプで変数とパラメーターを宣言する方法が見つかりません。cdefで使用できるタイプのリストを検索しましたが、何も見つかりませんでした。誰かが私にそのようなリスト(存在する場合)を指摘したり、Cythonで64ビットタイプを使用する方法を提案したりできますか?ありがとう。
python - CythonによるCコードの単純なラッピング
たくさんのC関数がありますが、Pythonから呼び出したいと思います。cythonが進むべき道のようですが、これがどのように正確に行われるかの例を実際に見つけることはできません。私のC関数は次のようになります。
私がやりたいのは、最初の3つのパラメーター(文字列と2つの整数)を指定し、8つのnumpy配列(またはpythonリスト。すべてのdouble配列にはN個の要素があります)を復元することです。私のコードは、ポインタがすでに割り当てられているメモリのチャンクを指していることを前提としています。また、生成されたCコードは、いくつかの外部ライブラリにリンクする必要があります。
python - Cython で C ラッパーを作成する - Python
次の C 関数をラップする方法を理解しようとしています = compress.c、compress.h。
チュートリアルに従ってみましたが、.pxdファイルを作成した後、何をすればよいかわかりません:|
私が理解したことから、これは私が持つべきpxdファイルです
この後、私は何をすべきかわかりません:|
助けてください!=)
編集:
このエラーの取得
とにかくありがとう=)
python - レーベンシュタイン距離を編集するために、python/cythonユニコード文字列を長整数の配列に変換する方法
ダメラウ・レーベネンシュテインの編集距離計算を行う次のCythonコード(bpbioプロジェクトから採用)があります。
コードは正常かつ高速に実行されます(私のPCでは1秒あたり300,000 ... 400,000の比較)。
課題は、このコードをUnicode文字列でも機能させることです。Python 3.1を実行していて、データベースからテキストを取得し、クエリテキストと照合します。
比較のためにCython関数に渡す前に、これらの文字列をエンコードするbytes
ことはお勧めできません。パフォーマンスが大幅に低下し(テスト済み)、7ビットのUSASCII以外の文字を含むテキストの結果が正しくない可能性があるためです。
(非常に簡潔な)Cythonマニュアルにはユニコード文字列が記載されていますが、目前の問題にはほとんど役立ちません。
私が見ているように、ユニコード文字列は、それぞれが単一のコードポイントを表す整数の配列として考えることができ、上記のコードは基本的にchar
すでにsの配列で動作しているので、 (1)それを拡張する必要があると思います整数のC配列を処理するため。(2) Pythonユニコード文字列をC配列に変換するコードを追加します。(3)利益!
( 注: このアプローチには2つの潜在的な問題があります:1つはユニコード代理文字の処理ですが、私はそれらをどうするか知っていると思います。もう1つの問題は、ユニコードコードポイントが実際には文字の概念に1:1でマッピングされないことです'。私はそれをよく知っていますが、この質問の範囲外だと思います。1つのUnicodeコードポイントが1つの比較単位であると想定してください。)
だから私はどのように提案を求めています
unsigned int
Pythonユニコード文字列を受け入れてCythonのC配列(4バイト)を返す高速Cython関数を記述します。これらの配列を処理し、正しいメモリ割り当て/割り当て解除を行うように示されているコードを変更します(これは私にとってかなり異質なことです)。
編集:ジョン・マチンchar *m1
は、奇妙なタイプキャストなどはおそらく速度やメモリの最適化のために行われていると指摘しています。これらの変数は、引き続き数値の配列として扱われます。私は、コードが長い文字列で起こりうるオーバーフローを防ぐために何もしていないことに気づきました。1つの配列要素が127または255を超えると、誤った結果が発生する可能性があります(使用するCコンパイラによって異なります)。バイオインフォマティクスプロジェクトからのコードには、ある種驚くべきものがあります。
とは言うものの、私が興味を持っているのは、ほぼ100文字未満のほぼ同一の文字列の正確な結果だけです。60%未満の同一性の結果は、私の目的では「完全に異なる」(長いテキストの長さを返すことによって)として安全に報告される可能性があるため、char *m1
キャストをそのままにしておくのが最善だと思いますが、オーバーフローをチェックするためのコードを追加します横行する非類似性の場合の早期中絶。
python - cythonでのnumpyの使用:ndarrayデータ型/ndimの定義
numpy配列で計算を行うためのcythonコードを書き込もうとしています。Cythonは、データ型と次元数を定義するために私が見たすべての例で使用されている[]を好まないようです。
たとえば、ファイルtest.pyxがあります。
これは、「python setup.pybuild_ext--inplace」で実行するsetup.py(投稿の最後を参照)を使用してコンパイルします。
次の出力が得られます。
一方、「[np.float64_t、ndim = 2]」の部分を削除すると、正常に機能します。
誰かアイデアはありますか?
私のシステム設定について:OS:Windows XP
完全な完全なpythonxyインストール、バージョン2.6.5.1(この時点で最新)
pythonxyにはcythonが付属していると思われますが、最終的には次のサイトからPython2.6用のcythonバージョン0.12.1をインストールしました。http://www.lfd.uci.edu/~gohlke/pythonlibs/#cython
どういうわけかパスなどが欠落しているのではないかと思います。mingwが使用するインクルードパスにnumpyヘッダーファイルディレクトリを明示的に追加することで、いくつかの問題を解決しました(以下のsetup.pyファイルを参照)。
これが私が言及したsetup.pyファイルです:
python - これらの C/Cython 配列が整数配列ではなく文字として定義されているのはなぜですか?
ここで質問#3367795を解決するために、多くの副問題に対処する必要があります。これらの1つは次のとおりです。上記のアルゴリズム(レーベンシュタイン距離)では、いくつかの配列がメモリに割り当てられ、次の行で初期化されます
blen
bytes
ここでは、Python変数の長さを参照します。今、私がアルゴリズムを理解している限り(完全なコードについては私の元の投稿を参照してください)、初期化のコードがm2
明確に示すように、これらの配列は文字ではなく整数を保持することを意図しているため、正しい割り当てはお気に入り
等々。C のバックグラウンドを持つ人は、なぜchar
が使用されているのかを説明できますか? また、おそらく Cython に傾倒している人々にとっては、キャストがあるのはなぜ<char *>
ですか? char *x = malloc( ... )
を定義するのに十分なはずだと思うでしょうx
。