计算色相角的均值

3 投票
1 回答
1295 浏览
提问于 2025-04-18 13:46

我在这个问题上纠结了很久,尽管在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

这对你可能没什么用,因为你提问后已经过了一段时间,而且你自己也实现了这个函数,但我希望这能对未来遇到同样问题的读者有所帮助。

撰写回答