在numpy数组中使用什么样的'int'?

时间:2014-03-01 22:18:20

标签: python c arrays numpy cython

将整数数组从numpy传递给C函数时,int的正确类型是什么?如果C函数需要一个普通int数组,那么:

A = np.array([1,2,3])

似乎不正确,因为它可以生成基本为np.int32_t s的long int类型数组?

这是正确的形式吗?

A = np.array([1,2,3], np.dtype("i"))

当C期望long int时,我想避免意外传递像int这样的内容。我写的所有C代码都应该在numpy数组中使用long int类型吗?

UPDATE 举一个具体的例子,如果Cython函数是:

cpdef int[:] test_func(int[:] arr, int[:] result):
    cdef int i = 0
    for i in xrange(arr.shape[0]):
    result[i] = arr[i] + 1
    return result

然后这似乎是正确的:

import numpy as np
input = np.array([1,2,3], dtype=np.dtype("i"))
result = np.empty(input.shape[0], dtype=np.dtype("i"))
test.test_func(input, result)

但如果您将dtype=np.dtype("i")替换为dtype=int,则会抱怨:

ValueError: Buffer dtype mismatch, expected 'int' but got 'long'

0 个答案:

没有答案