114 lines
2.8 KiB
Python
114 lines
2.8 KiB
Python
# ====================== 练习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)
|
||
|
||
# ====================== 练习2:4×4 黑白图像 ======================
|
||
print("\n" + "=" * 50)
|
||
print("练习2:4×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) |