【发布时间】:2012-01-22 16:32:42
【问题描述】:
各位,
如果我有一个浮点数列表,并且我想通过添加或减去 2pi 使它们在 0 到 2pi 的范围内。有什么好的方法吗?
非常感谢。
【问题讨论】:
各位,
如果我有一个浮点数列表,并且我想通过添加或减去 2pi 使它们在 0 到 2pi 的范围内。有什么好的方法吗?
非常感谢。
【问题讨论】:
使用% 运算符:
>>> pi = 3.1415
>>> angle = 2*pi+0.5
>>> angle % (2*pi)
0.5
>>> angle = -4*pi + 0.5
>>> angle % (2*pi)
0.5
对于角度列表,只需使用列表推导:
>>> L = [2*pi + 0.5, 4*pi + 0.6]
>>> [i % (2*pi) for i in L]
[0.5, 0.5999999999999996]
>>>
【讨论】:
你可以回答 mod 2 pi:
>>> import random
>>> from math import pi
>>> xx = list(random.uniform(-10,10) for i in range(4))
>>> xx
[-3.652068894375777, -6.357128588604748, 9.896564215080154, -6.298659336390939]
>>> yy = list(x % (2*pi) for x in xx)
>>> yy
[2.6311164128038094, 6.209242025754424, 3.613378907900568, 6.267711277968234]
【讨论】:
list(...) 和[...] 在这种情况下也是如此。另一个想法是list(...) 创建一个临时的generator 表达式,然后调用list 构造函数。虽然列表理解(您的解决方案)可能会避免创建临时对象,但它可能会更有效。
考虑使用 math.fmod() ,因为它比 % 运算符更擅长处理浮点数的舍入。见讨论here。
【讨论】: