gpt4 book ai didi

python - Project Euler #101 - 如何解决 numpy 多项式溢出问题?

转载 作者:太空宇宙 更新时间:2023-11-03 23:50:16 25 4
gpt4 key购买 nike

Project Euler #101

我刚开始学习 Numpy,到目前为止它对我来说看起来非常简单。

我遇到的一件事是,当我计算多项式时,结果是一个 int32,所以会发生溢出。

u = numpy.poly1d([1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1])
for i in xrange(1, 11):
print(i, u(i))

结果是:

(1, 1)
(2, 683)
(3, 44287)
(4, 838861)
(5, 8138021)
(6, 51828151)
(7, 247165843)
(8, 954437177)
(9, -1156861335)
(10, 500974499)

最后两项显然不正确。

我能想到的解决方法是将系数乘以 100

u = numpy.poly1d([0.01, -0.01, 0.01, -0.01, 0.01, -0.01, 0.01, -0.01, 0.01, -0.01, 0.01])
for i in xrange(1, 11):
print(i, int(u(i) * 100))

这次的结果是对的

(1, 1)
(2, 682)
(3, 44286)
(4, 838860)
(5, 8138020)
(6, 51828151)
(7, 247165843)
(8, 954437177)
(9, 3138105961L)
(10, 9090909091L)

有没有更好的方法? Numpy 是否允许我更改数据类型?谢谢。

最佳答案

有用的不是缩放 100,而是给定的数字是 float 而不是整数,因此具有更高的范围。由于浮点计算,如您所见,计算中存在一些不准确之处。

您可以像这样手动指定类型:

u = numpy.poly1d(numpy.array([1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1], dtype=numpy.int64))

这个问题的计算适合 64 位整数,所以这会起作用。

列出了支持的类型 here .

关于python - Project Euler #101 - 如何解决 numpy 多项式溢出问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2030422/

25 4 0
文章推荐: css - 我如何更改 JSF 文件的背景
文章推荐: html - 滚动时内容重叠
文章推荐: css -
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com