似乎vectorize from numpy将number从float舍入为整数,我不明白为什么。
下面是一个例子:
import numpy as np
def epsilon(n):
return 1.6952445781450207*2**(-1.028148909051717*n)
def pPsi(n):
return 1.0577183294485202*2**(-1.028620169094481*n)
def perrMaxFunc(n):
res=epsilon(n)/(2*np.abs(1/2**n-pPsi(n)))
return min([1,res])
vectorized_perr=np.vectorize(perrMaxFunc)
nmax=500;
perrMax=vectorized_perr([i for i in range(nmax)])
print(perrMax)
print(perrMaxFunc(500))
字符串
perrMax的所有元素都是1或0。最后一个元素例如等于0,而它应该等于perrMaxFunc(500)~4.91e-5。
因此,似乎vectorize函数以某种方式将perrMaxFunc的输出舍入为最接近的整数,我不明白为什么。
为什么代码要这样做?
1条答案
按热度按时间7fyelxc51#
如评论中所述,问题在于数据类型。
请考虑以下示例:
字符串
你可以清楚地看到,在
int32
的情况下,值为0。这是因为这个数字大于32位的存储量。在其他语言中,例如C/C++,这将是一个溢出,因为对于32位有符号整数,最大可表示值是231 − 1。为了克服这个问题,使用int64
或float作为数据类型。考虑numpy integer overflow的阅读模式--python整数中不存在的东西,因为它们在溢出时自动升级为python长整数。选项:
2
更改为2.0
n
必须是浮点数。将使用第一个选项:
这里有一个解决方法。我还使用了
np.minimum
而不是np.min
来避免使用np.vectorize
:型