如何在 Cython 中制作 int
类型的空 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)
但是,如果我尝试对 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
它给出了错误:
ValueError:缓冲区数据类型不匹配,预期为“int”但得到的是“double”
显然 np.empty()
返回一个 double 值。我试过:
cdef np.ndarray[np.int, ndim=1] myarr = np.empty(N, dtype=int)
但它给出了同样的错误。如何做到这一点?
最佳答案
包含声明
cimport numpy as np
并将数组声明为np.int32_t
:
cdef np.ndarray[np.int32_t, ndim=1] myarr = np.empty(N, dtype=np.int32)
您可以从类型声明中删除 32
,然后使用
cdef np.ndarray[np.int_t, ndim=1] myarr = np.empty(N, dtype=np.int)
但我更喜欢明确说明 numpy 数组中元素的大小。
请注意,我还将 dtype 添加到 empty
; empty
的默认 dtype 是 np.float64
。
关于python - 如何在 Cython 中初始化固定大小的整数 numpy 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16160475/