From 6b7043abc99fae43c68a612ce316501520608764 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=89=BF=E6=81=A9?= <2509165040@student.example.com> Date: Thu, 16 Apr 2026 15:56:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?= =?UTF-8?q?=20/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 40吴承恩.py | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 40吴承恩.py diff --git a/40吴承恩.py b/40吴承恩.py new file mode 100644 index 0000000..b53f39b --- /dev/null +++ b/40吴承恩.py @@ -0,0 +1,132 @@ +# ========================================== +# 练习1:图像矩阵操作 (3×3灰度图像) +# ========================================== +import numpy as np + +# 定义3×3灰度图像 +print("===== 练习1开始 =====") +image = np.array([ + [100, 150, 200], + [80, 120, 180], + [60, 90, 140] +], dtype=np.uint8) + +print("原图: ") +print(image) + +# 1. 变暗20:每个像素值减20 +image_dark = image - 20 +print("\n变暗20后: ") +print(image_dark) + +# 2. 裁剪左上角:保留2×2区域 +image_crop = image[0:2, 0:2] +print("\n裁剪左上角后: ") +print(image_crop) + +# 3. 水平翻转:使用np.fliplr() +image_flip = np.fliplr(image) +print("\n水平翻转后: ") +print(image_flip) +print("===== 练习1结束 =====\n") + + +# ========================================== +# 练习2:看图写代码 (4×4图像矩阵) +# ========================================== +print("===== 练习2开始 =====") +# 定义4×4图像矩阵 +img = np.array([ + [255, 255, 0, 0], + [255, 255, 0, 0], + [0, 0, 255, 255], + [0, 0, 255, 255] +], dtype=np.uint8) + +print("原始4x4图像:") +print(img) + +# 1. 统计白色(255)和黑色(0)像素数量 +white_count = np.sum(img == 255) +black_count = np.sum(img == 0) +print(f"\n白色像素(255)数量: {white_count}") +print(f"黑色像素(0)数量: {black_count}") + +# 2. 水平翻转并打印 +img_flipped = np.fliplr(img) +print("\n水平翻转后的图像:") +print(img_flipped) + +# 3. 逆时针旋转90度 (转置 + 上下翻转) +# 方法:先转置(.T),再上下翻转(np.flipud) +img_rotated = np.flipud(img.T) +print("\n逆时针旋转90度后的图像:") +print(img_rotated) +print("===== 练习2结束 =====\n") + + +# ========================================== +# 练习3:特征向量计算 +# ========================================== +print("===== 练习3开始 =====") +# 定义两个特征图 +feature_map1 = np.array([[1, 0, 1], [0, 1, 0], [1, 0, 1]]) +feature_map2 = np.array([[1, 1, 1], [1, 0, 0], [1, 0, 0]]) + +# 展平为向量 +vector1 = feature_map1.flatten() +vector2 = feature_map2.flatten() + +print("feature_map1 展平向量 vector1: ", vector1) +print("feature_map2 展平向量 vector2: ", vector2) + +# 1. 计算欧几里得距离 +# 公式: sqrt(sum((a-b)^2)) +euclidean_dist = np.linalg.norm(vector1 - vector2) +print(f"\nvector1 和 vector2 的欧几里得距离: {euclidean_dist:.4f}") + +# 2. 计算余弦相似度 +# 公式: dot(a,b) / (||a|| * ||b||) +cos_sim = np.dot(vector1, vector2) / (np.linalg.norm(vector1) * np.linalg.norm(vector2)) +print(f"vector1 和 vector2 的余弦相似度: {cos_sim:.4f}") +print("===== 练习3结束 =====\n") + + +# ========================================== +# 练习4:文本向量化 (预习挑战) +# ========================================== +print("===== 练习4开始 =====") +# 原始词汇表 +vocab = ["Python", "学习", "数据", "人工智能", "编程"] + +# 两句话 +doc1 = "Python学习编程" +doc2 = "Python人工智能数据" + +# 定义向量化函数 +def text_to_vector(text, vocab): + words = text.split() + vector = np.zeros(len(vocab)) + for i, word in enumerate(vocab): + vector[i] = words.count(word) + return vector + +# 生成向量 +v1 = text_to_vector(doc1, vocab) +v2 = text_to_vector(doc2, vocab) + +print("doc1向量: ", v1) +print("doc2向量: ", v2) + +# 2. 计算余弦相似度 +cos_sim_text = np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2)) +print(f"\ndoc1 和 doc2 的余弦相似度: {cos_sim_text:.4f}") + +# 3. 修改vocab,加入"机器",测试doc3 = "机器学习" +print("\n--- 修改词汇表并测试 doc3 ---") +new_vocab = ["Python", "学习", "数据", "人工智能", "编程", "机器"] +doc3 = "机器学习" +v3 = text_to_vector(doc3, new_vocab) +print(f"新词汇表: {new_vocab}") +print(f"doc3('{doc3}')的向量: ", v3) +print("===== 练习4结束 =====") \ No newline at end of file