18

dtype の numpy 配列を渡すと正常にnp.float64_t動作しますが (以下)、文字列配列を渡すことはできません。

これが機能するものです:

# cython_testing.pyx
import numpy as np
cimport numpy as np

ctypedef np.float64_t dtype_t 

cdef func1 (np.ndarray[dtype_t, ndim=2] A):
    print A 

def testing():
    chunk = np.array ( [[94.,3.],[44.,4.]], dtype=np.float64)

    func1 (chunk)

しかし、私はこれを機能させることが できません: numpy 文字列の dtype に一致する「型識別子」が見つかりません。

# cython_testing.pyx
import numpy as np
cimport numpy as np

ctypedef np.string_t dtype_str_t 

cdef func1 (np.ndarray[dtype_str_t, ndim=2] A):
    print A 

def testing():
    chunk = np.array ( [['huh','yea'],['swell','ray']], dtype=np.string_)

    func1 (chunk)

コンパイルエラーは次のとおりです。

Error compiling Cython file:
------------------------------------------------------------
ctypedef np.string_t dtype_str_t 
    ^
------------------------------------------------------------

cython_testing.pyx:9:9: 'string_t' is not a type identifier

アップデート

を調べるnumpy.pxdと、次のctypedefステートメントが表示されます。たぶん、uint8_tキャスティングができる限り、すべてを正常に使用してふりをすることができると言っても過言ではありませんか?

ctypedef unsigned char      npy_uint8
ctypedef npy_uint8      uint8_t

そのキャスティングがどれほど高価になるかを確認する必要があります。

4

2 に答える 2

7

あなたは運が悪いようです。

http://cython.readthedocs.org/en/latest/src/tutorial/numpy.html

ブール配列や文字列配列など、一部のデータ型はまだサポートされていません。


Saullo Castro's answer に示されているように、この回答はもはや有効ではありませんが、歴史的な目的のために残します。

于 2012-06-12T20:43:52.120 に答える