Cythonでnumpy ndarrayをある型から他の型にキャストすると、非常に奇妙なエラーが発生します。Cythonはfloat ndarrayをint ndarrayに変換できません
とValueError:DTYPEのミスマッチをバッファし、期待される「私は非常に身近なメッセージを持っ
from convert_test import convert_to_int
a_int=convert_to_int(np.zeros((2,2)).astype(np.float32))
:
cimport cython
import numpy as np
cimport numpy as np
DTYPE = np.float32
ctypedef np.float32_t DTYPE_t
def convert_to_int(np.ndarray[DTYPE_t, ndim=2] float_matrix):
cdef np.ndarray[np.int, ndim=2] int_matrix=float_matrix.astype(np.int)
return int_matrix
が、テストをコンパイルします。たとえば私は、次のconvert_test.pyxを書くときint object 'だが「long」を取得した
これはおそらく非常に明白ですが、私はまだそれを見ていません。
Python 3には 'int'型がありません。それは 'long'として実装されています。ですから、 'int'ではなく' long'に変換するべきでしょう。 Cythonには経験はありませんが、動作するかどうかは言えません。 – xyres
私はpython2を使用していますが、多分あなたは何かをしています。 – jean
@jeanこれは私の答えを参照してくださいCythonでさまざまなタイプのmemoryviewsを作る。あなたが本当にndarrayフォーマットを望むなら、私はそれをあなたのために書くことができますが、私の2番目のサンプルと1番目のサンプルを比較するとかなり直感的です。また、単一行から整数にキャストするだけで、小数点を切り捨てる(丸めなし)ので、この関数は意図したとおりではない可能性があります。 – Matt