如何在Cython中初始化固定大小的整数numpy数组?

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 emptynp.float64.