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

标签 python optimization numpy cython

如何在 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 添加到 emptyempty 的默认 dtype 是 np.float64

关于python - 如何在 Cython 中初始化固定大小的整数 numpy 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16160475/

相关文章:

optimization - 着色器优化 : Is a ternary operator equivalent to branching?

JavaScript 替换为回调 - 性能问题

python - 计算沿圆形路径的图像像素总和

python - 用 NumPy 中的列表元素替换数组元素

python - 如何获取名为捕获组的正则表达式的名称?

python - 从 Cython 中的列表调用方法

python - 如何在 Django JSONField 中过滤 JSON 数组

python - 如何在多个实例中使用prometheus?

database - 每 5 分钟更新一次全表

python - 在 numpy 的范围内生成随机日期