問題タブ [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 - Go と Cython の違い
今日、私の親友が、最新の Go 言語と、Python の C 拡張機能のセットであるCythonの主な違いは何かと尋ねてきました。私はPythonについてあまり知識がありません.GoがCythonよりも優れている/劣っている理由を誰か教えてもらえますか?
python - Python で C ライブラリをラップする: C、Cython、または ctypes?
Python アプリケーションから C ライブラリを呼び出したい。API 全体をラップするのではなく、自分のケースに関連する関数とデータ型だけをラップします。私が見る限り、私には 3 つの選択肢があります。
- C で実際の拡張モジュールを作成します。おそらくやり過ぎです。拡張機能の記述を学習するオーバーヘッドも避けたいと思います。
- Cythonを使用して、関連する部分を C ライブラリから Python に公開します。
ctypes
外部ライブラリとの通信に使用して、すべてを Python で実行します。
2) と 3) のどちらがより良い選択なのかはわかりません。3) の利点は、それctypes
が標準ライブラリの一部であり、結果のコードが純粋な Python になることです。ただし、その利点が実際にどれほど大きいかはわかりません。
どちらを選んでもメリット/デメリットはありますか? どのアプローチをお勧めしますか?
編集:すべての回答に感謝します。似たようなことをしたい人に良いリソースを提供します. もちろん、その決定はまだ 1 つのケースに対して行われる必要があります。「これが正しいことです」というような答えはありません。私の場合は、おそらく ctypes を使用しますが、他のプロジェクトで Cython を試すことも楽しみにしています。
真の答えは 1 つではありません。私は FogleBird の回答を選択しました。これは、ctypes に関するいくつかの優れた洞察を提供し、現在最も投票数の多い回答でもあるためです。ただし、すべての回答を読んで概要を把握することをお勧めします。
再度、感謝します。
python - cython で numpy を拡張する
このような関数がたくさんあるヘッダーファイルをラップしようとしています
test.h
numpy のものを使用できるようにします。
現在、次の cython コードがあります。
test.pyx
ただし、コンパイルしようとすると、エラーが発生します。
どうすればこれを修正できますか?
python - C++ lib を Cython でラップする
Cython は初めてで、Cython を使用して C/C++ 静的ライブラリをラップしようとしています。以下のように簡単な例を作りました。
Test.h:
Test.cpp
次に、g++ を使用してコンパイルおよびビルドしました。
これで、 というスタティック ライブラリを取得できましたlibtest.a
。
Test.pyx:
Setup.py:
私が電話した:
出力は次のとおりです。
libraries=['test']
の代わりにも使ってみましたlibraries=['libtest']
。それは私に同じエラーを与えました。
これについての手がかりはありますか?
python - Cythonを使用したCヘッダーのマジックナンバー/フラグへのアクセス
Cythonでアクセスしたいいくつかの標準Cライブラリには、たくさんのフラグがあります。Cythonのドキュメントには、必要なヘッダーの部分を複製する必要があると記載されています。関数の定義に関しては、これで問題ありません。それらは通常どこにでも複製され、ドキュメントが含まれます。しかし、これらすべてのマジックナンバーはどうですか?
を呼び出したい場合はmmap
、いつでも関数定義を見つけて.pxdファイルに貼り付けることができます。
PROT_READ
しかし、それを呼び出すには、などのような大量のフラグが必要MAP_ANONYMOUS
です。これには少なくとも2つの問題があります。
まず、これらの数値が定義されている場所を正確に特定するのは面倒な作業です。実際、私はむしろ.cファイルを作成し、必要な値をprintfしたいと思います。次のような特定のフラグの値を見つけるためのより良い方法はありますPROT_READ
か?
第二に、これらの数値はどれくらい安定していますか?必要なすべての値を抽出し、それらをCythonソースにハードコーディングした後、別のプラットフォームでのコンパイルが切り替わった可能性はどのくらいPROT_READ
ありPROT_EXEC
ますか?
良い方法や適切な方法がないと答えても、聞きたいです。何かを見逃していないことがわかっている限り、何かが面倒であることをいつでも受け入れることができます。
python - distutils が正しい場所で numpy ヘッダー ファイルを探すようにする
私のインストールでは、numpyarrayobject.h
は にあり…/site-packages/numpy/core/include/numpy/arrayobject.h
ます。numpy を使用する簡単な Cython スクリプトを作成しました。
次のdistutilsもあります( Cythonユーザーガイドsetup.py
からコピー):
でビルドしようとするとpython setup.py build_ext --inplace
、Cython は次のことを試みます。
予想通り、これは を見つけられませんarrayobject.h
。distutils で numpy インクルード ファイルの正しい場所を使用するにはどうすればよいですか (ユーザーに $CFLAGS を定義させずに)。
python - calling a cdef in a cdef class
is their any way to make this work, without sacrificing the cdef in cdef caller? (no use of cpdef either)
python - Cython は EXE にコンパイルできますか?
Cythonsの目的が何であるかを知っています。コードを高速化するために、コンパイル可能な C 拡張機能を Python に似た言語で記述します。私が知りたい (そして私の google-fu を使用して見つけることができないように見える) ことは、Cython が既に Python コードを C に分解しているように見えるため、何らかの方法で実行可能形式にコンパイルできるかどうかです。
私はすでにパッケージャーであるPy2Exeを使用していますが、これを使用して、解凍するのが少し難しいものにコンパイルすることに興味があります(Py2EXEを使用してパックされたものは、基本的に7zipを使用して抽出できますが、これは望ましくありません)
これが不可能な場合、私の次の代替手段は、すべてのコードをコンパイルしてモジュールとしてロードし、py2exe を使用してパッケージ化して、少なくともほとんどのコードをコンパイル済みの形式にすることですよね?
python - cython で eval() を使用する際の問題
私はいくつかのコードを高速化しようとしていたので、cython を使用してクラスと関数をコンパイルしようとしました
そしてすごい!まだ測定していませんが、少なくとも 10 倍高速に見えます。
私はちょうど 2 日前に cython を初めて見ましたが、とても感銘を受けました!
ただし、 eval() を機能させることはできません。
これを module1.pyd ファイルにコンパイルし、python ファイルで呼び出します。
これは以下を返します:
NameError: 名前 'a' が定義されていません。
すべての助けに感謝します。
python - 関数を高速化する必要があります。cython、ctypes、または他のものを使用する必要がありますか?
遺伝的プログラミングタイプのアプリケーションを作成して、Pythonを学ぶのはとても楽しいです。
このサイトでは、Torsten Marek、Paul Hankin、AlexMartelliから素晴らしいアドバイスがありました。
プログラムには4つの主な機能があります。
- 式ツリーを(ランダムに)生成します。
- 木の適性を評価する
- 交雑種
- 変異する
生成、交雑、変異のすべてが「適応度を評価する」と呼びます。これは最も忙しい機能であり、速度的には主要なボトルネックです。
遺伝的アルゴリズムの性質と同様に、それは巨大な解空間を検索する必要があるので、速いほど良いです。これらの各機能を高速化したいと思います。フィットネス評価者から始めましょう。私の質問は、これを行うための最良の方法は何ですか。私はcython、ctypes、および「リンクと埋め込み」を調査してきました。それらはすべて私にとって新しいものであり、現時点では私をはるかに超えていますが、1つ、そして最終的にはすべてを学ぶことを楽しみにしています。
「適応度関数」は、式ツリーの値をターゲット式の値と比較する必要があります。したがって、接尾辞の順序でツリーを読み取る接尾辞エバリュエーターで構成されます。私はすべてのコードをPythonで持っています。
cython、ctypes、またはリンクと埋め込みなど、今学習して使用する必要があるアドバイスが必要です。
ありがとうございました。