python属于什么部门_在Python中计算单位的n根

在使用Python3.5.2时,numpy.roots内存不足,当我试图确定unity的第1200个根时,我的Chromebook崩溃了。崩溃发生在他们构造多项式的伴随矩阵时,所以我不认为他们使用的是稀疏表示。从文件中:The algorithm relies on computing the eigenvalues of the companion matrix

如果您只需要计算单位根,三角法方法在时间和空间复杂性方面都是渐进式的更好:def nthRootsOfUnity1(n): # linear space, parallelizable

from numpy import arange, pi, exp

return exp(2j * pi / n * arange(n))

如果您愿意放弃并行化,可以使用生成器为每个额外的根实现恒定的空间和恒定的时间,而第一种方法必须在返回之前计算所有n个根:

^{pr2}$

在我的机器上,在不使用并行化的情况下,这些方法在numpy.roots计算第1000个根所需的时间内计算出第10000000个根:In [3]: n = 1000

In [4]: %time _ = sum(numpy.roots([1] + [0]*(n - 1) + [-1]))

CPU times: user 40.7 s, sys: 811 ms, total: 41.5 s

Wall time: 10.8 s

In [5]: n = 10000000

In [6]: %time _ = sum(nthRootsOfUnity1(n))

CPU times: user 4.98 s, sys: 256 ms, total: 5.23 s

Wall time: 5.23 s

In [7]: %time _ = sum(nthRootsOfUnity2(n))

CPU times: user 11.6 s, sys: 2 ms, total: 11.6 s

Wall time: 11.6 s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值