计算色相角的均值
我在这个问题上纠结了很久,尽管在StackOverflow上有相关的问题(比如这个)。
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),而且我看到的实现(比如这里)和我自己的很相似,所以我倾向于认为是 (c),但我真的不确定。
1 个回答
3
根据这个问题,我做了一些研究,发现了在scipy
库中的circmean
函数。考虑到你正在使用numpy
库,我觉得scipy
库中的这个函数应该能满足你的需求。
正如我在之前提到的问题的回答中所说,我没有找到这个函数的文档,但查看它的源代码后,我发现了它应该被调用的正确方式:
>>> 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
这对你可能没什么用,因为你提问后已经过了一段时间,而且你自己也实现了这个函数,但我希望这能对未来遇到同样问题的读者有所帮助。