From e3f04c4443eb39abfd7ceb3d4249834ed9687172 Mon Sep 17 00:00:00 2001 From: LufsX Date: Wed, 9 Oct 2024 01:13:40 +0800 Subject: [PATCH] fast !!! --- function.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/function.py b/function.py index a9b6f26..edc5b20 100644 --- a/function.py +++ b/function.py @@ -39,7 +39,7 @@ name = "向兴宇" # 这里写自己的代码实现 -def classify0(inX, dataSet, labels, k=8, _cache={"VI": None}): +def classify0(inX, dataSet, labels, k=8, _cache={"VI": None, "dataSet": None}): """ KNN 分类算法。 @@ -61,14 +61,13 @@ def classify0(inX, dataSet, labels, k=8, _cache={"VI": None}): diff = dataSet - inX # 使用矩阵运算计算马氏距离 - # distances = np.einsum("ij,jk,ik->i", diff, _cache["VI"], diff) + distances = np.einsum("ij,jk,ik->i", diff, _cache["VI"], diff) + + # 对距离排序,获取前 k 个最近的样本索引 + sortedDistIndices = np.argpartition(distances, 8)[:8] # 统计前 k 个样本的标签 - classCount = np.bincount( - labels[ - np.argpartition(np.einsum("ij,jk,ik->i", diff, _cache["VI"], diff), 8)[:8] - ] - ) + classCount = np.bincount(labels[sortedDistIndices]) # 返回出现次数最多的标签 return np.argmax(classCount)