Cython无法将float-ndarray转换为int-ndarray

2024-04-20 15:33:53 发布

您现在位置:Python中文网/ 问答频道 /正文

当我在Cython中将一个numpy-ndarray从一个类型转换到另一个类型时,出现了一个非常奇怪的错误。例如,当我编写下面的convert_测试.pyx公司名称:

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

编译并测试:

^{pr2}$

我得到了一个非常熟悉的信息:

值错误:缓冲区数据类型不匹配,应为“int object”,但得到的是“long”

这可能是非常明显的,但我还不太清楚。在


Tags: numpyconvertas错误npfloatmatrix中将
2条回答

必须在声明中使用类型:cdefnp.ndarray公司[np.国际,ndim=2]。在

你为什么不这么做?在我的电脑上编译和工作正常:

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):
    int_matrix = np.array(float_matrix, dtype=np.int32)
    return int_matrix

或者如果你真的想要一个记忆视图:

^{pr2}$

第二个答案是我刚刚将旧的ndarray参数转换为int_matrixfloat_matrix的现代typed memoryviews语法。上面的样式是矩阵的连续内存格式[:,:](比如NumPy默认为with数字0例如)。在

请注意,您发布的函数只是要截断小数点之后的所有内容(没有向上/向下取整),因此请确保这是您想要的。在

相关问题 更多 >