gpt4 book ai didi

python - 将大量数据存储到 numpy 数组中

转载 作者:太空狗 更新时间:2023-10-29 21:36:36 25 4
gpt4 key购买 nike

我有一个数据集,我正在尝试对其应用一些算术方法。问题是它给了我相对较大的数字,当我用 numpy 这样做时,它们被存储为 0。

奇怪的是,当我计算数字 appart 时,它们有一个 int 值,当我使用 numpy 计算它们时它们只会变成零。

x = np.array([18,30,31,31,15])
10*150**x[0]/x[0]
Out[1]:36298069767006890

vector = 10*150**x/x
vector
Out[2]: array([0, 0, 0, 0, 0])

我当然检查了他们的类型:

type(10*150**x[0]/x[0]) == type(vector[0])
Out[3]:True

我如何使用 numpy 计算这个大数字而不看到它们变成零?

请注意,如果我们在开始时删除因子 10,问题会稍微改变(但我认为这可能是类似的原因):

x = np.array([18,30,31,31,15])
150**x[0]/x[0]
Out[4]:311075541538526549

vector = 150**x/x
vector
Out[5]: array([-329406144173384851, -230584300921369396, 224960293581823801,
-224960293581823801, -368934881474191033])

负数表示 python 中 int64 类型被交叉的最大数不是吗?

最佳答案

正如 Nils Werner 已经提到的,numpy 的原生 ctypes 不能保存那么大的数字,但 python 本身可以,因为 int 对象使用任意长度的实现。所以你可以做的是告诉 numpy 不要将数字转换为 ctypes,而是使用 python 对象。这会更慢,但它会起作用。

In [14]: x = np.array([18,30,31,31,15], dtype=object)

In [15]: 150**x
Out[15]:
array([1477891880035400390625000000000000000000L,
191751059232884086668491363525390625000000000000000000000000000000L,
28762658884932613000273704528808593750000000000000000000000000000000L,
28762658884932613000273704528808593750000000000000000000000000000000L,
437893890380859375000000000000000L], dtype=object)

在这种情况下,numpy 数组不会存储数字本身,而是存储对相应 int 对象的引用。当您执行算术运算时,它们不会在 numpy 数组上执行,而是在引用后面的对象上执行。
我认为您仍然可以通过此解决方法使用大部分 numpy 函数,但它们肯定会比平时慢很多。

但这就是当你处理那么大的数字时得到的结果 :D
也许在某个地方有一个图书馆可以更好地处理这个问题。

只是为了完整性,如果精度不是问题,你也可以使用 float :

In [19]: x = np.array([18,30,31,31,15], dtype=np.float64)

In [20]: 150**x
Out[20]:
array([ 1.47789188e+39, 1.91751059e+65, 2.87626589e+67,
2.87626589e+67, 4.37893890e+32])

关于python - 将大量数据存储到 numpy 数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37271654/

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