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) # 左右翻转