9 python optimization numpy cython
如何int在Cython中创建类型为空的numpy数组?以下适用于double或float数组:
# make array of size N of type float
cdef np.ndarray[float, ndim=1] myarr = np.empty(N)
# make array of size N of type int
cdef np.ndarray[int, ndim=1] myarr = np.empty(N)
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试使用int执行相同操作,则会失败:
# this fails
cdef np.ndarray[np.int, ndim=1] myarr = np.empty(N)
# wanted to set first element to be an int
myarr[0] = 5
Run Code Online (Sandbox Code Playgroud)
它给出了错误:
ValueError:缓冲区dtype不匹配,预期'int'但得到'double'
因为显然会np.empty()返回双倍.我试过了:
cdef np.ndarray[np.int, ndim=1] myarr = np.empty(N, dtype=int)
Run Code Online (Sandbox Code Playgroud)
但它给出了同样的错误.如何才能做到这一点?
War*_*ser 12
包括声明
cimport numpy as np
Run Code Online (Sandbox Code Playgroud)
然后将数组声明为np.int32_t:
cdef np.ndarray[np.int32_t, ndim=1] myarr = np.empty(N, dtype=np.int32)
Run Code Online (Sandbox Code Playgroud)
您可以32从类型声明中删除,然后使用
cdef np.ndarray[np.int_t, ndim=1] myarr = np.empty(N, dtype=np.int)
Run Code Online (Sandbox Code Playgroud)
但我更喜欢明确numpy数组中元素的大小.
请注意,我还添加了dtype empty; 默认的dtype empty是np.float64.