我正在研究一个简单的KNN算法,我想在其中添加一个if语句来解析平局(如果在一个测试点周围,来自多个不同类的邻居数量相等)。当我想查找数组的最大值是否出现多次时会出现问题,但是我似乎找不到找到执行此操作的函数。我想要什么:
unique, counts = np.unique(k_nearest_labels, return_counts=True)
if (len(unique)>1) and (frequency of max(counts) in counts > 1)
return the nearest of the tied points
counts
是unique
中数字的频率。如何在if陈述式中解决第二个条件?还是我忽略了其他解决方案。
答案 0 :(得分:0)
您实际上可以跳过对np.unique
的使用(这在计算上是相当昂贵的),仍然可以得到所需的内容:
maxcount = (k_nearest_labels == k_nearest_labels.max()).sum()
if k_nearest_labels.size > maxcount and maxcount > 1:
...do stuff...
也:yaaay!您在编写问题时回答了自己的问题。总是很有趣。您绝对应该接受Hemerson的建议,然后将答案的编辑内容划分为适当的答案(这样可以使其他人更容易找到答案)。
答案 1 :(得分:0)
我解决了这个问题,忘了我可以创建一个布尔数组并求和,这是为那些偶然发现此问题的人提供的解决方案。
if (len(unique)>1) and (frequency of max(counts) in counts > 1)
可以写为:
if (len(unique)>1) and (np.sum(counts == np.max(counts)) > 1):