Files
task-3-1-3-Matrix-Fundament…/ljp.py
2026-04-16 16:02:35 +08:00

114 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ====================== 练习1图像矩阵基本操作 ======================
print("=" * 50)
print("练习1图像矩阵操作")
print("=" * 50)
image = np.array([
[100, 150, 200],
[80, 120, 180],
[60, 90, 140]
], dtype=np.uint8)
print("原图:")
print(image)
# 1. 整体变暗 20
darker = image - 20
print("\n变暗20")
print(darker)
# 2. 裁剪左上角 2×2
crop = image[0:2, 0:2]
print("\n裁剪左上角2×2")
print(crop)
# 3. 水平翻转
flip_horizontal = np.fliplr(image)
print("\n水平翻转:")
print(flip_horizontal)
# ====================== 练习24×4 黑白图像 ======================
print("\n" + "=" * 50)
print("练习24×4图像矩阵")
print("=" * 50)
img = np.array([
[255, 255, 0, 0],
[255, 255, 0, 0],
[0, 0, 255, 255],
[0, 0, 255, 255]
], dtype=np.uint8)
# 统计像素
count_white = np.sum(img == 255)
count_black = np.sum(img == 0)
print("白色像素:", count_white)
print("黑色像素:", count_black)
# 水平翻转
flip_h = np.fliplr(img)
print("\n水平翻转:")
print(flip_h)
# 逆时针旋转90度
rotate_90_ccw = np.flipud(img.T)
print("\n逆时针旋转90度")
print(rotate_90_ccw)
# ====================== 练习3特征向量相似度计算 ======================
print("\n" + "=" * 50)
print("练习3特征向量与相似度")
print("=" * 50)
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]])
vec1 = feature_map1.flatten()
vec2 = feature_map2.flatten()
print("展平向量1", vec1)
print("展平向量2", vec2)
# 欧氏距离
euclidean_dist = np.linalg.norm(vec1 - vec2)
print("\n欧几里得距离:", euclidean_dist)
# 余弦相似度
def cos_sim(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
print("余弦相似度:", cos_sim(vec1, vec2))
# ====================== 练习4文本向量化 ======================
print("\n" + "=" * 50)
print("练习4文本向量化")
print("=" * 50)
vocab = ["Python", "学习", "数据", "人工智能", "编程"]
doc1 = "Python学习编程"
doc2 = "Python人工智能数据"
def text2vec(text, vocab):
words = text.split()
vec = np.zeros(len(vocab))
for i, w in enumerate(vocab):
vec[i] = words.count(w)
return vec
v1 = text2vec(doc1, vocab)
v2 = text2vec(doc2, vocab)
print("句子1向量", v1)
print("句子2向量", v2)
print("余弦相似度:", cos_sim(v1, v2))
# 扩展词汇表
vocab_new = ["Python", "学习", "数据", "人工智能", "编程", "机器"]
doc3 = "机器学习"
v3 = text2vec(doc3, vocab_new)
print("\n扩展词汇表后句子3向量", v3)