上传文件至 /
This commit is contained in:
132
40吴承恩.py
Normal file
132
40吴承恩.py
Normal file
@@ -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结束 =====")
|
||||||
Reference in New Issue
Block a user