【发布时间】:2019-07-02 09:29:10
【问题描述】:
我正在使用 Cython 和 numpy,并且有一个奇怪的问题与改变 numpy 数组元素的 dtype 的 cython 函数有关。奇怪的是,只有当实际指定数组的输入类型时,dtype才会改变。
我在 Ubuntu 18.04 上使用 Cython==0.29.11、numpy==1.15.4、python 3.6。
# cyth.pyx
cimport numpy as np
def test(x):
print(type(x[0]))
def test_np(np.ndarray[np.uint32_t, ndim=1] x):
print(type(x[0]))
现在对这个文件进行 cythonising 并使用函数:
>>> from cyth import test, test_np
>>> import numpy as np
>>> a = np.array([1, 2], dtype=np.uint32)
>>> test(a)
<class 'numpy.uint32'>
>>> test_np(a)
<class 'int'>
所以test 按预期工作,打印输入数组中第一个元素的类型 - 一个 uint32。但是test_np,它实际上确保传入数组的类型是 uint32,现在将常规 Python int 显示为第一个元素的类型。
即使试图强制元素为正确类型也不起作用,即使用:
def test_np(np.ndarray[np.uint32_t, ndim=1] x):
cdef np.uint32_t el
el = x[0]
print(type(el))
还是有结果
>>> test_np(a)
<class 'int'>
对于理解这种差异的任何帮助将不胜感激。
【问题讨论】: