如何处理 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 中的大整数?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理SQL Server事务复制中的大事务操作

Windows 如何处理无符号 64 位整数?

c语言是如何处理除法运算的呀?

如何处理来自 S3 的大文件并在 Spring Batch 中使用它

PHP如何处理整数索引的非连续键控数组?

Java 如何处理整数下溢和上溢以及如何检查它?