尽管有关于SO的相关问题(例如this one),我一直在努力解决这个问题。
def circmean(arr):
arr = np.deg2rad(arr)
return np.rad2deg(np.arctan2(np.mean(np.sin(arr)),np.mean(np.cos(arr))))
但结果我没有意义!我经常得到负值,例如:
test = np.array([323.64,161.29])
circmean(test)
>> -117.53500000000004
我不知道(a)我的功能是否不正确,(b)我使用的方法是不正确的,或者(c)我只需要对负值进行转换(添加360度?)。我的研究表明问题不是(a),而且我已经看到与我自己匹配的实现(例如here),所以我倾向于(c),但我真的不知道。
答案 0 :(得分:1)
关注this question后,我做了一些研究,让我在scipy
library找到circmean
函数。
考虑到您正在使用numpy
库,我认为scipy
库中的正确实现符合您的需求。
正如我在回答上述问题时所指出的那样,我还没有找到任何关于该功能的文档,但是检查它的source code显示了它应该被调用的正确方法:
>>> import numpy as np
>>> from scipy import stats
>>>
>>> test = np.array([323.64,161.29])
>>> stats.circmean(test, high=360)
242.46499999999995
>>>
>>> test = np.array([5, 350])
>>> stats.circmean(test, high=360)
357.49999999999994
这可能对你没什么用处,因为自从你发布问题并考虑到你已经自己实现了这个功能以来已经过了一段时间,但我希望它可能会让那些正在努力解决同样问题的未来读者受益