gpt4 book ai didi

python - Cython 的 array.array 中的 8 字节 int (long long)

转载 作者:太空宇宙 更新时间:2023-11-03 17:15:05 25 4
gpt4 key购买 nike

我有这个代码:

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 中 long long 的代码是什么? IE。我应该在该行放置什么而不是 "l"

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

更新:根据此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)

最佳答案

如果您能够使用 numpy,您可以非常轻松地指定 64 位整数。

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

或者同等的

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

(您可以用各种数组创建函数来替换)。

要将字符串转换为 64 位 int,您只需这样做

np.int64(string)

如果您只想使用标准库,我不知道有什么好的通用解决方案。

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

关于python - Cython 的 array.array 中的 8 字节 int (long long),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33724009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com