在Cython中填充64位numpy数组比32位数组慢

时间:2017-05-11 16:01:41

标签: python numpy 64-bit cython

我试图理解为什么填充64位数组比填充32位数组慢。

以下是示例:

@cython.boundscheck(False)
@cython.wraparound(False)
def test32(long long int size):
   cdef np.ndarray[np.int32_t,ndim=1] index = np.zeros(size, np.int32)
   cdef Py_ssize_t i

   for i in range(size):
       index[i] = i

   return indx

@cython.boundscheck(False)
@cython.wraparound(False)
def test64(long long int size):
   cdef np.ndarray[np.int64_t,ndim=1] index = np.zeros(size, np.int64)
   cdef Py_ssize_t i

   for i in range(size):
       index[i] = i

   return indx

时间安排:

In [4]: %timeit test32(1000000)
1000 loops, best of 3: 1.13 ms over loop

In [5]: %timeit test64(1000000)
100 loops, best of 3: 2.04 ms per loop

我使用的是64位计算机和Visual C ++ for Python(9.0)编译器。

编辑:

初始化64位阵列和32位阵列似乎需要相同的时间,这意味着时间差异是由于填充过程造成的。

In [8]: %timeit np.zeros(1000000,'int32')
100000 loops, best of 3: 2.49 μs per loop

In [9]: %timeit np.zeros(1000000,'int64')
100000 loops, best of 3: 2.49 μs per loop

EDIT2:

正如DavidW所指出的,这种行为可以用np.arange复制,这意味着这是预期的:

In [7]: %timeit np.arange(1000000,dtype='int32')
10 loops, best of 3: 1.22 ms per loop

In [8]: %timeit np.arange(1000000,dtype='int64')
10 loops, best of 3: 2.03 ms per loop

0 个答案:

没有答案