From f32bcebcff3a8d6e6edb239215c576dbf2218887 Mon Sep 17 00:00:00 2001 From: Xionghaoran <719929980@qq.com> Date: Tue, 15 Oct 2024 11:57:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20function.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- function.py | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/function.py b/function.py index b1f8c16..39bc7e4 100644 --- a/function.py +++ b/function.py @@ -41,7 +41,7 @@ name = "test_name" # 这里写自己的代码实现 -def classify(input_vector, dataSet, labels, k=0): +def classify(input_vector, dataSet, labels, k=3): """ KNN 分类算法。 @@ -54,7 +54,15 @@ def classify(input_vector, dataSet, labels, k=0): Returns: - int: 预测的分类标签。 """ - + # 计算欧氏距离 + distances = np.linalg.norm(dataSet - input_vector, axis=1) + # 获取距离最近的 k 个样本的索引 + nearest_neighbors_indices = distances.argsort()[:k] + # 获取这些样本的标签 + nearest_labels = np.array(labels)[nearest_neighbors_indices] + # 统计出现次数最多的标签并返回 + predicted_label = np.bincount(nearest_labels).argmax() + return predicted_label # 这里也写自己的代码实现 def load_dataset(directory): @@ -68,7 +76,14 @@ def load_dataset(directory): - np.array: 特征数据。 - np.array: 标签数据。 """ - + labels = [] + data_list = [] + for filename in os.listdir(directory): + label = int(filename.split('_')[0]) + labels.append(label) + vector = img_to_vector(os.path.join(directory, filename)) + data_list.append(vector) + return np.array(data_list), np.array(labels) # 这里还写自己的代码实现 def img_to_vector(filename): @@ -82,7 +97,13 @@ def img_to_vector(filename): Returns: - np.array: 二值图像向量。 """ - + with open(filename) as f: + lines = f.readlines() + vector = np.zeros((1, 1024)) + for i in range(32): + for j in range(32): + vector[0, 32 * i + j] = int(lines[i][j]) + return vector if __name__ == "__main__": # 以下代码可用于测试,可自行随意修改 @@ -128,4 +149,4 @@ if __name__ == "__main__": train_labels, ) - print(f"预测的标签: {predicted_label}") + print(f"预测的标签: {predicted_label}") \ No newline at end of file