上传文件至 /
This commit is contained in:
223
47丁恩琪.py
Normal file
223
47丁恩琪.py
Normal file
@@ -0,0 +1,223 @@
|
|||||||
|
import numpy as np
|
||||||
|
|
||||||
|
# 假设一张 4x4 的灰度图像
|
||||||
|
image = np.array([
|
||||||
|
[255, 200, 150, 100],
|
||||||
|
[180, 140, 110, 80],
|
||||||
|
[120, 90, 60, 40],
|
||||||
|
[50, 30, 20, 10]
|
||||||
|
])
|
||||||
|
# 255 = 最亮(白),0 = 最暗(黑)
|
||||||
|
# 彩色图像:高度 x 宽度 x 3(红、绿、蓝三通道)
|
||||||
|
color_image = np.array([
|
||||||
|
[[255, 0, 0], [0, 255, 0], [0, 0, 255]], # 第1行像素:红、绿、蓝
|
||||||
|
[[255, 255, 0], [0, 255, 255], [255, 0, 255]], # 第2行像素:黄、青、紫
|
||||||
|
[[128, 128, 128],[100, 100, 100],[50, 50, 50]] # 第3行像素:灰度
|
||||||
|
])
|
||||||
|
# 一维数组(向量)
|
||||||
|
vec = np.array([1, 2, 3, 4, 5])
|
||||||
|
print(vec) # [1 2 3 4 5]
|
||||||
|
|
||||||
|
# 二维数组(矩阵)
|
||||||
|
mat = np.array([
|
||||||
|
[1, 2, 3],
|
||||||
|
[4, 5, 6]
|
||||||
|
])
|
||||||
|
print(mat)
|
||||||
|
# [[1 2 3]
|
||||||
|
# [4 5 6]]
|
||||||
|
# 全0数组 - 常用于初始化
|
||||||
|
zeros = np.zeros((3, 4)) # 3行4列的全0矩阵
|
||||||
|
print(zeros)
|
||||||
|
# [[0. 0. 0. 0.]
|
||||||
|
# [0. 0. 0. 0.]
|
||||||
|
# [0. 0. 0. 0.]]
|
||||||
|
|
||||||
|
# 全1数组
|
||||||
|
ones = np.ones((2, 3))
|
||||||
|
# [[1. 1. 1.]
|
||||||
|
# [1. 1. 1.]]
|
||||||
|
|
||||||
|
# 指定范围内的数组
|
||||||
|
arr = np.arange(0, 10, 2) # 0到10,步长2
|
||||||
|
print(arr) # [0 2 4 6 8]
|
||||||
|
|
||||||
|
# 等差数组
|
||||||
|
lin = np.linspace(0, 1, 5) # 0到1之间均匀取5个数
|
||||||
|
print(lin) # [0. 0.25 0.5 0.75 1. ]
|
||||||
|
a = np.array([[1, 2, 3], [4, 5, 6]])
|
||||||
|
|
||||||
|
print(a.ndim) # 维度数量 = 2(是二维数组/矩阵)
|
||||||
|
print(a.shape) # 形状 = (2, 3) 2行3列
|
||||||
|
print(a.size) # 总元素数 = 6
|
||||||
|
print(a.dtype) # 数据类型 = int64
|
||||||
|
|
||||||
|
# 对于图像数据,常用 uint8(无符号8位整数,0-255)
|
||||||
|
image = np.array([[255, 128], [64, 0]], dtype=np.uint8)
|
||||||
|
print(image.dtype) # uint8
|
||||||
|
a = np.array([10, 20, 30, 40, 50])
|
||||||
|
|
||||||
|
print(a[0]) # 第一个元素 = 10
|
||||||
|
print(a[-1]) # 最后一个元素 = 50
|
||||||
|
print(a[1:3]) # 第2到第3个元素 = [20, 30]
|
||||||
|
print(a[:3]) # 前3个元素 = [10, 20, 30]
|
||||||
|
print(a[2:]) # 第3个到最后 = [30, 40, 50]
|
||||||
|
mat = np.array([
|
||||||
|
[1, 2, 3, 4],
|
||||||
|
[5, 6, 7, 8],
|
||||||
|
[9, 10, 11, 12]
|
||||||
|
])
|
||||||
|
|
||||||
|
# 获取特定元素
|
||||||
|
print(mat[0, 0]) # 第1行第1列 = 1
|
||||||
|
print(mat[1, 2]) # 第2行第3列 = 7
|
||||||
|
print(mat[2, -1]) # 第3行最后一列 = 12
|
||||||
|
|
||||||
|
# 切片:[行, 列]
|
||||||
|
print(mat[0, :]) # 第1行所有列 = [1, 2, 3, 4]
|
||||||
|
print(mat[:, 1]) # 所有行第2列 = [2, 6, 10]
|
||||||
|
print(mat[0:2, 0:2]) # 取前2行前2列
|
||||||
|
# [[1 2]
|
||||||
|
# [5 6]]
|
||||||
|
|
||||||
|
# 负索引
|
||||||
|
print(mat[-1, :]) # 最后一行 = [9, 10, 11, 12]
|
||||||
|
a = np.array([1, 2, 3])
|
||||||
|
b = np.array([4, 5, 6])
|
||||||
|
|
||||||
|
# 加减乘除(对应元素运算)
|
||||||
|
print(a + b) # [5 7 9]
|
||||||
|
print(a - b) # [-3 -3 -3]
|
||||||
|
print(a * b) # [4 10 18] 注意:这是元素乘法,不是矩阵乘法
|
||||||
|
print(a / b) # [0.25 0.4 0.5]
|
||||||
|
|
||||||
|
# 标量运算(广播)
|
||||||
|
print(a * 2) # [2 4 6]
|
||||||
|
print(a + 10) # [11 12 13]
|
||||||
|
print(a ** 2) # [1 4 9] 平方
|
||||||
|
A = np.array([[1, 2], [3, 4]])
|
||||||
|
B = np.array([[5, 6], [7, 8]])
|
||||||
|
|
||||||
|
# 使用 @ 运算符 或 np.dot()
|
||||||
|
C = A @ B
|
||||||
|
print(C)
|
||||||
|
# [[19 22]
|
||||||
|
# [41 46]]
|
||||||
|
|
||||||
|
# 或者
|
||||||
|
C = np.dot(A, B)
|
||||||
|
print(C)
|
||||||
|
a = np.array([1, 2, 3, 4, 5])
|
||||||
|
|
||||||
|
print(np.sum(a)) # 求和 = 15
|
||||||
|
print(np.mean(a)) # 平均值 = 3.0
|
||||||
|
print(np.max(a)) # 最大值 = 5
|
||||||
|
print(np.min(a)) # 最小值 = 1
|
||||||
|
print(np.std(a)) # 标准差
|
||||||
|
print(np.argmax(a)) # 最大值的索引 = 4
|
||||||
|
print(np.argmin(a)) # 最小值的索引 = 0
|
||||||
|
|
||||||
|
# 对于二维数组,可以指定轴
|
||||||
|
mat = np.array([[1, 2, 3], [4, 5, 6]])
|
||||||
|
print(np.sum(mat, axis=0)) # 按列求和 = [5 7 9]
|
||||||
|
pra = np.array([1, 2, 3, 4, 5, 6])
|
||||||
|
|
||||||
|
# 展平(flatten): 多维变一维
|
||||||
|
print(a.flatten()) # [1 2 3 4 5 6]
|
||||||
|
|
||||||
|
# 改变形状(reshape)
|
||||||
|
b = a.reshape(2, 3) # 变成2行3列
|
||||||
|
print(b)
|
||||||
|
# [[1 2 3]
|
||||||
|
# [4 5 6]]
|
||||||
|
|
||||||
|
# 转置(transpose): 行变列
|
||||||
|
print(b.T)
|
||||||
|
# [[1 4]
|
||||||
|
# [2 5]
|
||||||
|
# [3 6]]
|
||||||
|
|
||||||
|
# 翻转
|
||||||
|
c = np.array([[1, 2, 3], [4, 5, 6]])
|
||||||
|
print(np.fliplr(c)) # 左右翻转
|
||||||
|
# [[3 2 1]
|
||||||
|
# [6 5 4]]
|
||||||
|
print(np.flipud(c)) # 上下翻转
|
||||||
|
# [[4 5 6]
|
||||||
|
# [1 2 3]]int(np.sum(mat, axis=1)) # 按行求和 = [6 15]
|
||||||
|
a = np.array([1, 2, 3, 4, 5, 6])
|
||||||
|
|
||||||
|
# 展平(flatten): 多维变一维
|
||||||
|
print(a.flatten()) # [1 2 3 4 5 6]
|
||||||
|
|
||||||
|
# 改变形状(reshape)
|
||||||
|
b = a.reshape(2, 3) # 变成2行3列
|
||||||
|
print(b)
|
||||||
|
# [[1 2 3]
|
||||||
|
# [4 5 6]]
|
||||||
|
|
||||||
|
# 转置(transpose): 行变列
|
||||||
|
print(b.T)
|
||||||
|
# [[1 4]
|
||||||
|
# [2 5]
|
||||||
|
# [3 6]]
|
||||||
|
|
||||||
|
# 翻转
|
||||||
|
c = np.array([[1, 2, 3], [4, 5, 6]])
|
||||||
|
print(np.fliplr(c)) # 左右翻转
|
||||||
|
# [[3 2 1]
|
||||||
|
# [6 5 4]]
|
||||||
|
print(np.flipud(c)) # 上下翻转
|
||||||
|
# [[4 5 6]
|
||||||
|
# [1 2 3]]
|
||||||
|
a = np.array([10, 20, 30, 40, 50])
|
||||||
|
|
||||||
|
# 找出满足条件的元素
|
||||||
|
print(a > 25) # [False False False True True]
|
||||||
|
print(a[a > 25]) # [30 40 50] 只保留大于25的值
|
||||||
|
|
||||||
|
# 统计满足条件的数量
|
||||||
|
print(np.sum(a > 25)) # 3
|
||||||
|
|
||||||
|
# 替换值
|
||||||
|
b = np.where(a > 25, a, 0) # 大于25保留,否则改成0
|
||||||
|
print(b) # [0 0 30 40 50]
|
||||||
|
a = np.array([3, 4])
|
||||||
|
|
||||||
|
# L2范数(欧几里得距离)
|
||||||
|
norm = np.linalg.norm(a)
|
||||||
|
print(norm) # 5.0 (因为 3² + 4² = 25, √25 = 5)
|
||||||
|
|
||||||
|
# 点积(dot product)
|
||||||
|
b = np.array([1, 2])
|
||||||
|
dot = np.dot(a, b)
|
||||||
|
print(dot) # 3*1 + 4*2 = 11
|
||||||
|
|
||||||
|
# 余弦相似度
|
||||||
|
def cosine_similarity(a, b):
|
||||||
|
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
|
||||||
|
|
||||||
|
v1 = np.array([1, 0, 1])
|
||||||
|
v2 = np.array([1, 1, 0])
|
||||||
|
print(cosine_similarity(v1, v2)) # 约 0.707
|
||||||
|
a = np.array([1, 2, 3])
|
||||||
|
b = a # 这是引用,不是复制!
|
||||||
|
b[0] = 100
|
||||||
|
print(a[0]) # 100,a也跟着变了
|
||||||
|
|
||||||
|
# 如果想复制,应该用
|
||||||
|
c = a.copy()
|
||||||
|
c[0] = 999
|
||||||
|
print(a[0]) # 100,a不变
|
||||||
|
# 亮度调整:所有像素值加一个常数
|
||||||
|
brighter = image + 30 # 变亮
|
||||||
|
darker = image - 30 # 变暗
|
||||||
|
|
||||||
|
# 对比度调整:像素值乘以一个系数
|
||||||
|
contrasted = image * 1.5 # 对比度增强
|
||||||
|
# 裁剪:取矩阵的一部分
|
||||||
|
top_left = image[0:2, 0:2] # 取左上角2x2区域
|
||||||
|
|
||||||
|
# 旋转:矩阵转置和翻转
|
||||||
|
rotated = np.transpose(image) # 转置
|
||||||
|
flipped = np.fliplr(image) # 左右翻转
|
||||||
Reference in New Issue
Block a user