如何处理 NumPy 中的大整数?
Posted
技术标签:
【中文标题】如何处理 NumPy 中的大整数?【英文标题】:How to deal with large integers in NumPy? 【发布时间】:2022-01-17 19:03:20 【问题描述】:我正在做一个数据分析项目,我正在处理非常大的数字。我最初用纯 python 做所有事情,但现在我尝试用 numpy 和 pandas 来做。但是,我似乎遇到了障碍,因为无法在 numpy 中处理大于 64 位的整数(如果我在 numpy 中使用 python int,它们的最大值为 9223372036854775807)。我是完全扔掉 numpy 和 pandas 还是有办法将它们与 python 风格的任意大整数一起使用?性能下降我没问题。
【问题讨论】:
你可以看看这个post。他们讨论了关于 numpy 中最大数字表示的问题。您可以将其转换为对象以适应存储大值,但不能将其用于中间计算。 【参考方案1】:默认情况下,numpy 将元素保留为数字数据类型。 但是您可以强制输入对象,如下所示
import numpy as np
x = np.array([10,20,30,40], dtype=object)
x_exp2 = 1000**x
print(x_exp2)
输出是
[1000000000000000000000000000000
1000000000000000000000000000000000000000000000000000000000000
1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000]
缺点是执行速度慢很多。
稍后编辑以显示 np.sum() 有效。当然可能会有一些限制。
import numpy as np
x = np.array([10,20,30,40], dtype=object)
x_exp2 = 1000**x
print(x_exp2)
print(np.sum(x_exp2))
print(np.prod(x_exp2))
输出是:
[1000000000000000000000000000000
1000000000000000000000000000000000000000000000000000000000000
1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000]
1000000000000000000000000000001000000000000000000000000000001000000000000000000000000000001000000000000000000000000000000
1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
【讨论】:
谢谢,我明白了。但是,这样做我不会失去很多 numpy 的好处吗?似乎我现在无法访问 int 上可用的任何方法,例如 sum。我想这是合理的 @lapurita:它可能取决于 python/numpy 版本。我正在尝试 sum() 和 prod() 操作,它们似乎没问题。我将在答案中添加一个编辑以上是关于如何处理 NumPy 中的大整数?的主要内容,如果未能解决你的问题,请参考以下文章