在Cython的array.array中有8个字节的int(long long)

时间:2015-11-15 19:30:09

标签: python arrays cython

我有这段代码:

from cpython cimport array
...
a = array.array("l")
array.resize_smart(a, 10)
...
# String here - some string which i want to parse into long
a[0] = long(string)

从long int创建数组,当我在linux环境中编译此代码时,一切正常,Cython将此l类型转换为long int,但在某些Windows编译器中,此long int是4-字节长。

我想用8字节的int(long long)创建一个数组,但我不知道Cython中的代码是多长时间的代码?即我应该在那条线上放置什么而不是"l"

第二个问题:我之前在Cython代码中使用了long(string),从字符串中解析了很长时间,但是我现在应该用什么来从字符串中获取长数字?

已更新:根据此https://docs.python.org/3/library/array.html 'q',但似乎此解决方案仅适用于3.x

已更新:在@DavidW建议之后,我将该代码改写为:

cimport numpy as np
import numpy as np
np.import_array()
...
cdef np.ndarray[np.int64_t] a = np.arange(0, dtype=np.int64)
a = np.resize(a, len(a) + 1)
...
a[0] = np.int64(string)

1 个答案:

答案 0 :(得分:1)

如果你能够使用numpy,你可以很容易地指定64位整数。

 a = np.zeros(shape,dtype='i8')

或等效

 a = np.zeros(shape,dtype=np.int64)

(您可以用zeros替换各种各样的数组创建函数。

要从字符串转换为64位int,您只需

np.int64(string)

如果您只想使用标准库,我不知道一个很好的通用解决方案。

请注意,这个答案中没有任何内容实际上是Cython特有的 - 它与纯Python一样好用。