Cythonを使用してc ++テンプレートをラップし、任意のnumpy配列を受け入れます

マキシムイマカエフ

c ++で記述された並列ソートをテンプレートとしてラップし、任意の数値型のnumpy配列で使用しようとしています。Cythonを使用してこれを実行しようとしています。

私の問題は、(正しいタイプの)numpy配列データへのポインターをc ++テンプレートに渡す方法がわからないことです。これには融合dtypeを使用する必要があると思いますが、その方法がよくわかりません。

.pyxファイルのコードは以下のとおりです

# importing c++ template
cdef extern from "test.cpp":
    void inPlaceParallelSort[T](T* arrayPointer,int arrayLength)

def sortNumpyArray(np.ndarray a):
    # This obviously will not work, but I don't know how to make it work. 
    inPlaceParallelSort(a.data, len(a))

以前は、考えられるすべてのdtypeに対して醜いforループを使用して同様のタスクを実行しましたが、これを行うにはもっと良い方法があるはずだと思います。

IanH

はい、融合型を使用して、Cythonにソートテンプレートを呼び出して、テンプレートを適切に特殊化する必要があります。これは、でこれを行うすべての非複素数データ型の実用的な例ですstd::sort

# cython: wraparound = False
# cython: boundscheck = False

cimport cython

cdef extern from "<algorithm>" namespace "std":
    cdef void sort[T](T first, T last) nogil

ctypedef fused real:
    cython.char
    cython.uchar
    cython.short
    cython.ushort
    cython.int
    cython.uint
    cython.long
    cython.ulong
    cython.longlong
    cython.ulonglong
    cython.float
    cython.double

cpdef void npy_sort(real[:] a) nogil:
    sort(&a[0], &a[a.shape[0]-1])

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

コールバックを受け入れるテンプレート関数を使用してCスタイルの配列を設定します

分類Dev

任意の数とタイプの引数を受け入れる関数をクラステンプレート引数として渡す

分類Dev

配列とベクトルへの参照の両方を受け入れる関数テンプレートをどのように作成しますか?

分類Dev

テンプレートはconstを受け入れますが、リテラルは受け入れません

分類Dev

タイプまたはテンプレートのいずれかをパラメーターとして受け入れるテンプレート

分類Dev

関数テンプレートは異なるラムダを受け入れて返します

分類Dev

非型テンプレートパラメータとして任意のサイズのcharのstd :: arrayを受け入れる

分類Dev

cythonのテンプレートパラメータとして関数ポインタを使用してC ++コードをラップする

分類Dev

テンプレート関数を宣言して、任意のコンテナを受け入れますが、含まれているタイプは1つだけです

分類Dev

Julia:複数の配列タイプを受け入れるテンプレート関数

分類Dev

C ++は関数をテンプレートとして受け入れ、関数の戻り値の型のベクトルを返します

分類Dev

テンプレート関数:「auto」がラムダに対して行うように、任意の引数タイプを受け入れるための構文はありますか?

分類Dev

Android kotlinメソッドは、任意のオブジェクトタイプをパラメーターとして受け入れます

分類Dev

Scalaでテーブル名と列名のリストを受け入れ、列の値に追加されたプレフィックスを返します

分類Dev

jQueryプラグインはオプションとして配列を受け入れます

分類Dev

テンプレート化された型の関数を受け入れる関数にラムダを渡します

分類Dev

matplotlibは、フレーム、軸のない図を作成し、カラーマップを使用して2D配列をプロットし、入力と同じサイズのnumpy配列にプロットを保存します。

分類Dev

C++ 可変個引数テンプレートが iostream 値をパラメータとして受け入れないのはなぜですか?

分類Dev

配列を受け入れるC ++テンプレートが、ポインター(bis)を受け入れる1つよりも特殊化されていないのはなぜですか?

分類Dev

メタプログラミングを介してテンプレートポインタクラスの配列にデータを入力します

分類Dev

[]および=演算子をオーバーロードして、C ++でテンプレートクラスの値を受け入れる

分類Dev

Htmlまたはその他のコンポーネントをパラメーターとして受け入れるViewComponentテンプレート/コンテナーを作成します

分類Dev

特定のタイプのみを受け入れるC ++テンプレート

分類Dev

test_train_splitのラッパーで、任意の数の入力配列のトレイン、検証、およびテスト分割を生成します

分類Dev

バリアントを使用する場合、テンプレート化された子は親として受け入れられません

分類Dev

TypeScriptを使用して、配列を受け入れるReactステートレス関数型コンポーネントを作成する

分類Dev

cythonを使用してPythonループnumpy.searchsortedを並列化します

分類Dev

エラー:「int」の前にプライマリ式が必要です(配列を受け入れる関数のコンテキストで)

分類Dev

テンプレートは、1つの特殊化でthrowとnothrowの両方を受け入れます

Related 関連記事

  1. 1

    コールバックを受け入れるテンプレート関数を使用してCスタイルの配列を設定します

  2. 2

    任意の数とタイプの引数を受け入れる関数をクラステンプレート引数として渡す

  3. 3

    配列とベクトルへの参照の両方を受け入れる関数テンプレートをどのように作成しますか?

  4. 4

    テンプレートはconstを受け入れますが、リテラルは受け入れません

  5. 5

    タイプまたはテンプレートのいずれかをパラメーターとして受け入れるテンプレート

  6. 6

    関数テンプレートは異なるラムダを受け入れて返します

  7. 7

    非型テンプレートパラメータとして任意のサイズのcharのstd :: arrayを受け入れる

  8. 8

    cythonのテンプレートパラメータとして関数ポインタを使用してC ++コードをラップする

  9. 9

    テンプレート関数を宣言して、任意のコンテナを受け入れますが、含まれているタイプは1つだけです

  10. 10

    Julia:複数の配列タイプを受け入れるテンプレート関数

  11. 11

    C ++は関数をテンプレートとして受け入れ、関数の戻り値の型のベクトルを返します

  12. 12

    テンプレート関数:「auto」がラムダに対して行うように、任意の引数タイプを受け入れるための構文はありますか?

  13. 13

    Android kotlinメソッドは、任意のオブジェクトタイプをパラメーターとして受け入れます

  14. 14

    Scalaでテーブル名と列名のリストを受け入れ、列の値に追加されたプレフィックスを返します

  15. 15

    jQueryプラグインはオプションとして配列を受け入れます

  16. 16

    テンプレート化された型の関数を受け入れる関数にラムダを渡します

  17. 17

    matplotlibは、フレーム、軸のない図を作成し、カラーマップを使用して2D配列をプロットし、入力と同じサイズのnumpy配列にプロットを保存します。

  18. 18

    C++ 可変個引数テンプレートが iostream 値をパラメータとして受け入れないのはなぜですか?

  19. 19

    配列を受け入れるC ++テンプレートが、ポインター(bis)を受け入れる1つよりも特殊化されていないのはなぜですか?

  20. 20

    メタプログラミングを介してテンプレートポインタクラスの配列にデータを入力します

  21. 21

    []および=演算子をオーバーロードして、C ++でテンプレートクラスの値を受け入れる

  22. 22

    Htmlまたはその他のコンポーネントをパラメーターとして受け入れるViewComponentテンプレート/コンテナーを作成します

  23. 23

    特定のタイプのみを受け入れるC ++テンプレート

  24. 24

    test_train_splitのラッパーで、任意の数の入力配列のトレイン、検証、およびテスト分割を生成します

  25. 25

    バリアントを使用する場合、テンプレート化された子は親として受け入れられません

  26. 26

    TypeScriptを使用して、配列を受け入れるReactステートレス関数型コンポーネントを作成する

  27. 27

    cythonを使用してPythonループnumpy.searchsortedを並列化します

  28. 28

    エラー:「int」の前にプライマリ式が必要です(配列を受け入れる関数のコンテキストで)

  29. 29

    テンプレートは、1つの特殊化でthrowとnothrowの両方を受け入れます

ホットタグ

アーカイブ