我正在用 Python 实现 K 近邻算法(对于那些不了解学习的人,这是一种用于根据已经分类的数据使用欧氏距离对对象进行分类的算法).
我已经计算了我的距离,我可以采用 k 个最近的距离,并找到这些对象的类别。我的问题是,如果 K 大于 1,比如 3 或 5,我不确定如何获得列表中出现频率最高的元素。
比如我的输出是:
[10, 9, 7, 10]
10 出现次数最多,所以我想返回这个数字。如果出现平局(2 个或更多元素出现频率相同),它会返回一个错误(我可以自己处理)。我只是想就如何返回上面列表的最大值提出一些意见。 (使用 python 2.6.6 所以我不能使用集合导入)。
第二个问题:
我正在尝试将 numpy 数组转换为普通数组。我的代码如下所示:
def getClassesOfIndexes(l):
tmp1 = []
for i in l:
tmp1.append(classes[i])
return tmp1
print(getClassesOfIndexes([1024, 9128, 394, 39]))
打印如下:[array([10], dtype=uint8), array([7], dtype=uint8), array([10], dtype=uint8), array([9] , dtype=uint8)]
我可以做些什么让它简单地返回 [10, 7, 10, 9]
?
感谢您的帮助。
最佳答案
问题 2 更容易(尽管将来,请将不相关的问题作为两个单独的问题发布到 SO 上)。 tolist
函数自动将 numpy 数组转换为常规列表 http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.tolist.html
问题 1 也非常简单。你说你想要“列表中最常见的元素”。这里有一个完整的讨论Python most common element in a list .一种解决方案是将每个元素映射到其频率的字典,然后获取与映射中最大值对应的键。这可能看起来像
...
freq_map = {my_list.count(val):val for val in set(my_list)}
return freq_map[max(freq_map.keys())]
关于Python - 从数组中获取最频繁的元素/将 numpy 数组转换为 std 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29157310/