diff --git a/function.py b/function.py index 613f28c..41a9bd7 100644 --- a/function.py +++ b/function.py @@ -54,7 +54,7 @@ def classify(input_vector, dataSet, labels, k=3): Returns: - int: 预测的分类标签。 """ - # 计算欧氏距离 + # 计算欧氏距离 distances = np.linalg.norm(dataSet - input_vector, axis=1) # 获取距离最近的 k 个样本的索引 nearest_neighbors_indices = distances.argsort()[:k] @@ -79,12 +79,14 @@ def load_dataset(directory): 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) + if filename.endswith(".txt"): # 确保读取的是 txt 文件 + 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): """ @@ -97,16 +99,15 @@ def img_to_vector(filename): Returns: - np.array: 二值图像向量。 """ - with open(filename) as f: + with open(filename, 'r') as f: # 确保使用文本模式读取 lines = f.readlines() - vector = np.zeros((1, 1024)) + vector = np.zeros((1024,), dtype=int) # 将其改为 (1024,) 的一维数组 for i in range(32): for j in range(32): - vector[0, 32 * i + j] = int(lines[i][j]) + vector[32 * i + j] = int(lines[i][j]) return vector if __name__ == "__main__": - # 以下代码可用于测试,可自行随意修改 train_data, train_labels = load_dataset("trainingDigits") test_data = ( @@ -143,10 +144,8 @@ if __name__ == "__main__": "00000000000001111111110000000000" "00000000000000000111100000000000" ) - predicted_label = classify( - np.array([int(char) for char in test_data]).reshape(1, 1024), - train_data, - train_labels, - ) - + + test_vector = np.array([int(char) for char in test_data]).reshape(1, 1024) + + predicted_label = classify(test_vector, train_data, train_labels) print(f"预测的标签: {predicted_label}") \ No newline at end of file