問題タブ [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.

0 投票する
2 に答える
7165 参照

c++ - CythonC++およびstd::string

cythonのC++標準std::stringを使用する最良の方法は何ですか?最後のcythonディストリビューションはとにかく簡単になるはずですが、なぜstd::vectorではなくstd::stringのラッパーがあるのだろうか...

0 投票する
1 に答える
3255 参照

python - Cythonはオブジェクトの反復配列を高速化できますか?

cythonを使用して次のコードを高速化したい:

頭に浮かぶのは次のようなものだけです。

基本的に、C ++での解決策は、仮想メソッドを使用していくつかの基本クラスへのポインターの配列をfun()作成することです。そうすれば、かなりすばやく反復処理できます。Python / Cythonを使用してそれを行う方法はありますか?

ところで:Pythonリストの代わりにdtype = object_でnumpyの2D配列を使用する方が速いでしょうか?

0 投票する
1 に答える
6747 参照

python - Windows XP での Cython の問題: 「エラー: vcvarsall.bat が見つかりません」

Cython のバージョンは 0.13、Python 3.1 Cython の FAQ にあるすべての「解決策」を試しましたが、うまくいきませんでした。私の Visual Studio のバージョンは 7.1 で、そのディレクトリには vcvarsall.bat が含まれていません。この問題には解決策がありますか?

0 投票する
2 に答える
2184 参照

python - Python パッケージのオプションの C 拡張機能を作成する最も簡単な方法は何ですか?

コマンド ライン オプションが渡された場合にのみ、Python パッケージで (setuptools を使用して) 有効にしたい C 拡張機能を作成しました。これを行う最も簡単な方法は何ですか?

これについて簡単な方法を見つけることができないようです。

0 投票する
1 に答える
1867 参照

c++ - Cython を使用して機能を別のアプリケーションに公開する

ソフトウェアを DLL にコンパイルしてアプリケーション フォルダーに配置することで、ソフトウェアを拡張する方法を示す次の C++ コードがあります。

Cython を使用してこの方法でプラグインを作成することは可能ですか? それともpy2exeですか?DLL にはエントリ ポイントが必要です。

それとも、ネイティブにコンパイルして、elmerを使用して Python を埋め込む必要がありますか?

0 投票する
6 に答える
9013 参照

python - ゲーム開発に Cython を使用していますか?

Cython をゲームの主要なプログラミング言語として使用することは、どれほど実用的でしょうか?

私は経験豊富な Python プログラマーで、Python が大好きですが、特にゲーム プログラミングに関しては初心者です。通常、Python は本格的なゲーム プログラミングを行うには遅すぎると考えられているため、Cython に興味を持っています。Cython を使用すると、Python に似た言語を C の速度で使用できます。

いずれにせよ、おそらく C/C++ を少し学ぶ必要があることは理解していますが、Cython を使用すると開発時間がかなり短縮されるようです。

それで、それは実用的ですか?また、OpenGL、OpenAL、Bullet Physics などの C/C++ ライブラリを引き続き使用できますか?

0 投票する
4 に答える
1915 参照

python - C 拡張または Cython を使用した重要な Python アプリケーションの最適化に関するチュートリアル

Python コミュニティは、Python コードのプロファイリング方法や、C またはCythonでの Python 拡張機能の技術的な詳細を示す参考資料を公開しています。私はまだチュートリアルを探していますが、自明ではないPythonプログラムについては、次のことを示しています。

  1. C 拡張への変換による最適化の恩恵を受けるホットスポットを特定する方法
  2. 同様に重要なこととして、C 拡張への変換の恩恵を受けないホットスポットを特定する方法
  3. 最後に、Python から C への適切な変換を行う方法について説明します。Python C-API を使用するか、(できれば) Cython を使用します。

優れたチュートリアルでは、完全な例を使用して最適化の問題を解決する方法について、読者に方法論を提供します。そのようなリソースを見つけることに成功しませんでした。

そのようなチュートリアルを知っていますか (または書いたことがありますか) ?

明確にするために、以下のみをカバーするチュートリアルには興味がありません。

  • (c)Profile を使用して Python コードをプロファイリングし、実行時間を測定する
  • ツールを使用してプロファイルを調べる ( RunSnakeRunをお勧めします)
  • より適切なアルゴリズムまたは Python コンストラクトを選択することによる最適化 (たとえば、リストの代わりにメンバーシップ テストのセット)。チュートリアルでは、アルゴリズムと Python コードが既に最適化されていると想定する必要があり、C 拡張が次の論理的なステップになる時点に達しています。
  • C 拡張機能の作成に関する Python ドキュメントの要約。これは、リファレンスとしては優れていますが、Python から C にいつ、どのように移行するかを示すリソースとしては役に立ちません。
0 投票する
2 に答える
1570 参照

python - cython で可能な最適化: numpy 配列

以下は、多変量正規分布から描画するための Cython コードです。密度が毎回異なるため、ループを使用しています。(conLSigma はコレスキー因子)

ループごとに逆分解とコレスキー分解を行っているため、これには多くの時間がかかります。純粋な python コードよりも高速ですが、速度をさらに向上させる方法があるかどうか疑問に思っていました。

0 投票する
7 に答える
9910 参照

python - Cython による速度向上なし

積分をシミュレートするための内部ループを含む関数を定義しようとしています。

問題は速度です。私のマシンでは、関数を 1 回評価するのに最大 30 秒かかることがあります。私の最終的な目標は、この関数を最小限に抑えることなので、速度を少し上げるとよいでしょう。

そのため、私は Cython を動作させようとしましたが、重大な間違いを犯しているに違いありません (多くの場合!)。Cython のドキュメントに従って、変数を入力しようとしました。その後、コードは純粋な Python と同じくらい遅くなります。これは奇妙に思えます。

これが私のコードです:

コードのプロファイリングを行ったところ、パフォーマンスを低下させているのは関数 S (積分シミュレーター) のようです。とにかく、変数を入力することで、少なくともある程度の速度向上が期待できました。何の利益ももたらさなかったので、私はいくつかの根本的な間違いを犯していると信じるようになりました.

この結果につながる可能性のある Cython コードの明らかなエラーに気付いた人はいますか?

ああ、私はプログラミングに非常に慣れていないので、確かに多くの悪いスタイルとコードの速度を低下させるものがあります. 時間があれば、これらの点についても率直に教えてください。

0 投票する
1 に答える
1122 参照

python - Cython からファイルのようなオブジェクトを公開する

Cython モジュールでラップしている C ライブラリからファイルのようなオブジェクトを公開する必要があります。バッファリング、readline() などに python のジェネリック io コードを再利用したい。

新しいIOモジュールは私が必要としているもののようですが、実際にCythonからそれを使用することは自明ではないようです.私はいくつかのアプローチを試しました:

  • IO.RawIOBase から継承する cdef クラスの私のコード - cdef クラスは他の cython cdef クラスからのみ継承できるのに対し、IO は「生の」C であるため、これは失敗します。

  • cdef クラスと、私の cdef クラスと RawIOBase の両方を継承する別の (非 cdef) クラスのコード - 「TypeError: 複数のベースにインスタンス レイアウトの競合があります」で失敗する

  • RawIOBase から継承する (非 cdef) クラスのコード - これは機能しますが、C レベル (基礎となるライブラリと対話する必要がある) のものをクラス内に格納する機能が失われるため、make が必要です。それをcdefラッパーで囲み、それをメンバーとして保存します...これは混乱のように見えます。

  • (Raw)IOBase を継承しない cdef クラスの私のコードは、その機能を再実装します。Python コードは、オブジェクトを BufferedReader/BufferedWriter でラップします。

私の質問:

1) 私は何かを見逃していて、ここで車輪を再発明していますか?

2) Python の現在および将来のバージョンで BufferedReader/Writer をオブジェクトに満足させるために実装する必要がある IOBase の正確なものは何ですか? これはどこかに文書化されていますか?

3) IO が純粋な python である python 2.6 では、どのように機能しますか? そのパフォーマンスは低下すると思いますが、うまくいきますよね?