当我在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”
这可能是非常明显的,但我还不太清楚。在
必须在声明中使用类型:cdefnp.ndarray公司[np.国际,ndim=2]。在
你为什么不这么做?在我的电脑上编译和工作正常:
或者如果你真的想要一个记忆视图:
^{pr2}$第二个答案是我刚刚将旧的
ndarray
参数转换为int_matrix
和float_matrix
的现代typed memoryviews
语法。上面的样式是矩阵的连续内存格式[:,:]
(比如NumPy默认为with数字0例如)。在请注意,您发布的函数只是要截断小数点之后的所有内容(没有向上/向下取整),因此请确保这是您想要的。在
相关问题 更多 >
编程相关推荐