Python numpy方法是否能正确处理太大而不适合numpy数据类型的数字?

Python numpy方法是否能正确处理太大而不适合numpy数据类型的数字?,python,numpy,int,precision,Python,Numpy,Int,Precision,我想知道numpy函数是否可以正确处理大于int64或float128的数字 编辑:应用于任何numpy数组之外的numbers/python对象的numpy函数。比如在列表理解中使用np函数,该函数适用于int128列表的内容 我在他们的文档中找不到任何关于这方面的信息,但我真的不知道该怎么想和期待。从测试来看,它应该可以工作,但我想确定一下,一些琐碎的测试不会有帮助。所以我来这里是为了获取知识: 如果np框架不处理这么大的数字,它的函数是否能够处理这些问题 编辑:对不起,我不清楚。请参见上面

我想知道numpy函数是否可以正确处理大于int64或float128的数字 编辑:应用于任何numpy数组之外的numbers/python对象的numpy函数。比如在列表理解中使用np函数,该函数适用于int128列表的内容

我在他们的文档中找不到任何关于这方面的信息,但我真的不知道该怎么想和期待。从测试来看,它应该可以工作,但我想确定一下,一些琐碎的测试不会有帮助。所以我来这里是为了获取知识:
如果np框架不处理这么大的数字,它的函数是否能够处理这些问题

编辑:对不起,我不清楚。请参见上面的编辑
提前感谢。

您可以拥有python对象的numpy数组,它可能是一个太大的python整数,无法放入np.int64中。numpy的一些功能可以工作,但许多函数调用底层c代码,但这些代码无法工作。以下是一个例子:

import numpy as np
a = np.array([123456789012345678901234567890]) # a has dtype object now
print((a*2)[0])  # Works and gives the right result
print(np.exp(a)) # Does not work, because "'int' object has no attribute 'exp'"

一般来说,大多数功能可能会因为您的超大数字而丢失。另外,正如已经指出的,当您有一个数据类型为np.int64或类似的数组时,当您将数组元素的大小增加到超过该类型的限制时,就会出现溢出问题。使用numpy时,必须小心数组的数据类型

您可以拥有python对象的numpy数组,它可能是一个太大的python整数,无法放入np.int64中。numpy的一些功能可以工作,但许多函数调用底层c代码,但这些代码无法工作。以下是一个例子:

import numpy as np
a = np.array([123456789012345678901234567890]) # a has dtype object now
print((a*2)[0])  # Works and gives the right result
print(np.exp(a)) # Does not work, because "'int' object has no attribute 'exp'"

一般来说,大多数功能可能会因为您的超大数字而丢失。另外,正如已经指出的,当您有一个数据类型为np.int64或类似的数组时,当您将数组元素的大小增加到超过该类型的限制时,就会出现溢出问题。使用numpy时,必须小心数组的数据类型

当将数字存储到数据类型不足以存储的numpy数组中时,会出现截断或错误

arr = np.empty(1, dtype=np.int64)
arr[0] = 2**65
arr
给出
溢出错误:Python int太大,无法转换为C long

arr = np.empty(1, dtype=float16)
arr[0] = 2**64
arr
给出
inf
(无错误)


给出了
[32768.]
(即2**15),因此发生了截断。对于float128,这种情况更难发生…

当将数字存储到数据类型不足以存储它的numpy数组中时,您将得到截断或错误

arr = np.empty(1, dtype=np.int64)
arr[0] = 2**65
arr
给出
溢出错误:Python int太大,无法转换为C long

arr = np.empty(1, dtype=float16)
arr[0] = 2**64
arr
给出
inf
(无错误)


给出了
[32768.]
(即2**15),因此发生了截断。如果使用float128,则更难做到这一点。

请参阅Numpy文档中的扩展精度标题。对于非常大的数字,您还可以创建一个数组,将
dtype
设置为
'object'
,这基本上允许您在大数字上使用Numpy框架,但性能低于使用本机类型。但是,正如前面所指出的,当您尝试调用数组中保存的特定对象不支持的函数时,这将中断

import numpy as np

arr = np.array([10**105, 10**106], dtype='object')

但简单的回答是,使用这些大数字时,您可能会并且将会出现意外行为,除非您特别注意考虑它们。

请参阅Numpy文档中的扩展精度标题。对于非常大的数字,您还可以创建一个数组,将
dtype
设置为
'object'
,这基本上允许您在大数字上使用Numpy框架,但性能低于使用本机类型。但是,正如前面所指出的,当您尝试调用数组中保存的特定对象不支持的函数时,这将中断

import numpy as np

arr = np.array([10**105, 10**106], dtype='object')

但简单的回答是,除非您特别注意考虑这些大数字,否则在使用这些大数字时,您可能会并且将会得到意外的行为。

对不起,我的意思是,如果这些大数字的格式比numpy数据类型的限制更高,那么它们是否适用于python对象(就像python int可以适应128位格式,如果需要的话)?对不起,我想问一下,当python对象适应int128这样的格式时,它们是否可以工作在python对象上,而不是numpy数据类型的限制(就像python int可以适应128位格式,如果需要的话)?