如何实现reverse_k_nearest_neighbors函数?求技术指导
求助:实现反向k近邻函数
reverse_k_nearest_neighbors 我需要编写reverse_k_nearest_neighbors(k, q, A)函数,计算集合𝐴中点𝑞(𝑞∈𝐴)的反向k近邻,返回按邻居在𝐴中索引排序的有序列表。
我已经完成了k_nearest_neighbors(k, q, A)和all_k_nearest_neighbors(k, A)的编码,代码通过所有测试,且受限制仅能使用list、sort、append等少量Python方法,代码如下:
import math def euclidian_distance(a, b): # 计算二维空间中两点a和b之间的欧氏距离 return math.sqrt((a[0] - b[0])**2 + (a[1] - b[1])**2) def k_nearest_neighbors(k, q, A): """计算A中q点的k个最近邻""" # 距离计算的参考点 ref = A[q] distance = [] # 计算参考点与A中其他所有点的距离 for i in range(len(A)): if i != q: distance.append((euclidian_distance(A[i], ref), i)) # 按距离排序,获取k个最近邻的索引 distance.sort(key=lambda x: x[0]) indices = [i for dist, i in distance[:k]] # 手动实现索引排序(不使用sorted()) for i in range(len(indices) - 1): min_index = i for j in range(i + 1, len(indices)): if indices[j] < indices[min_index]: min_index = j indices[i], indices[min_index] = indices[min_index], indices[i] return indices # 测试用例 A = [[0.0,0.0], [1.0,1.0], [4.0,1.0], [0.0,3.0], [1.0,3.0]] assert k_nearest_neighbors(2,0,A) == [1,3] assert k_nearest_neighbors(2,1,A) == [0,4] assert k_nearest_neighbors(2,2,A) == [1,4] assert k_nearest_neighbors(2,3,A) == [1,4] assert k_nearest_neighbors(2,4,A) == [1,3] def all_k_nearest_neighbors(k, A): """计算A中所有点的k个最近邻""" results = [] for i in range(len(A)): results.append(k_nearest_neighbors(k, i, A)) return results # 测试用例 A = [[0.0, 0.0], [1.0, 1.0], [4.0, 1.0], [0.0, 3.0], [1.0, 3.0]] assert all_k_nearest_neighbors(2, A) == [[1, 3], [0, 4], [1, 4], [1, 4], [1, 3]]
但我完全不知道如何编写reverse_k_nearest_neighbors函数,尝试的代码均无法通过以下测试用例,请求帮助:
# 测试用例 A = [[0.0,0.0], [1.0,1.0], [4.0,1.0], [0.0,3.0], [1.0,3.0]] assert reverse_k_nearest_neighbors(2,0,A) == [1] assert reverse_k_nearest_neighbors(2,1,A) == [0,2,3,4] assert reverse_k_nearest_neighbors(2,2,A) == [] assert reverse_k_nearest_neighbors(2,3,A) == [0,4] assert reverse_k_nearest_neighbors(2,4,A) == [1,2,3]
内容的提问来源于stack exchange,提问作者Mettid
相关产品推荐
相关产品推荐

