python numpy包的使用
文章目录比较常用的功能计算相似度计算矩阵有人问 求平均数还不简单还用的着mean()方法吗?np.sum()方法计算矩阵的行和与列和keepdims求和后保持结果的维度不变示例np.sum()的内置参数非常强的一个包在数组、矩阵、向量计算方面极具优势。比较常用的功能np.array() # 创建向量数据np.dot() # 计算点积np.linalg # 线性代数linalg不是最终的方法它下面有很多具体的方法np.linalg.norm()# 计算模长np.mean() # 求平均数linalg()看起怪怪的这很正常它的英文是linear algebra(线性代数)看做linalg就好理解了。计算相似度代码importnumpyasnp# 1. 创建向量 (模拟 AI 生成的 Embedding)# 实际中这些向量可能有 1536 维这里为了演示用 5 维vec_anp.array([0.9,0.8,0.1,0.2,0.5])# 语义喜欢、吃、水果vec_bnp.array([0.85,0.9,0.2,0.1,0.6])# 语义喜欢、吃、水果 (很相似)vec_cnp.array([0.1,0.2,0.9,0.8,0.1])# 语义天气、时间、好 (不相似)# 2. 计算余弦相似度# 公式(A · B) / (||A|| * ||B||)# 结果越接近 1表示越相似defcosine_similarity(v1,v2):# np.dot 计算点积dot_productnp.dot(v1,v2)# np.linalg.norm 计算范数模长norm_v1np.linalg.norm(v1)norm_v2np.linalg.norm(v2)returndot_product/(norm_v1*norm_v2)# 3. 执行计算score_abcosine_similarity(vec_a,vec_b)score_accosine_similarity(vec_a,vec_c)print(f向量 A 和 B 的相似度:{score_ab:.4f})# 结果应该接近 1print(f向量 A 和 C 的相似度:{score_ac:.4f})# 结果应该接近 0 或更低输出结果向量 A 和 B 的相似度:0.9898向量 A 和 C 的相似度:0.3383计算矩阵代码importnumpyasnp# 1. 创建一个 3x3 的矩阵 (比如 3 个学生的 3 门课成绩)scoresnp.array([[80,90,85],# 学生 A: 语文, 数学, 英语[70,85,90],# 学生 B[95,95,90]# 学生 C])print(--- 原始数据 ---)print(scores)# 2. 批量计算给所有成绩加 5 分 (向量化操作不需要写循环)new_scoresscores5print(\n--- 加分后 ---)print(new_scores)# 3. 统计分析计算每门课的平均分 (按列计算axis0)# axis0 表示“竖着切”即计算每一列avg_scoresnp.mean(scores,axis0)print(\n--- 每门课平均分 ---)print(f语文:{avg_scores[0]}, 数学:{avg_scores[1]}, 英语:{avg_scores[2]})# 4. 筛选数据找出所有大于 90 分的成绩high_scoresscores[scores90]print(\n--- 大于 90 分的成绩 ---)print(high_scores)输出结果---原始数据---[[809085][708590][959590]]---加分后---[[859590][759095][10010095]]---每门课平均分---语文:81.66666666666667,数学:90.0,英语:88.33333333333333---大于90分的成绩---[9595]有人问 求平均数还不简单还用的着mean()方法吗?看清了这可不是数组求和/个数这可是矩阵。自己写需要写一堆for循环乱七八槽效率还低。mean()方法一行代码搞定清爽高效。np.sum()方法计算矩阵的行和与列和importnumpyasnp# 创建一个 3x3 的矩阵matrixnp.array([[1,2,3],[4,5,6],[7,8,9]])# 1. 计算所有元素的总和total_sumnp.sum(matrix)print(总和:,total_sum)# 输出: 45# 2. 计算每一列的和 (沿着行方向即 axis0)col_sumnp.sum(matrix,axis0)print(每列的和:,col_sum)# 输出: [12 15 18]# 3. 计算每一行的和 (沿着列方向即 axis1)row_sumnp.sum(matrix,axis1)print(每行的和:,row_sum)# 输出: [ 6 15 24]keepdims求和后保持结果的维度不变示例代码importnumpyasnp# 创建一个 3x4 的矩阵arrnp.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])print(原始形状:,arr.shape)# (3, 4)sum_normalnp.sum(arr,axis1)print(普通求和结果:,sum_normal)# [10 26 42]print(普通求和形状:,sum_normal.shape)# (3,) -- 注意变成了1维sum_keepnp.sum(arr,axis1,keepdimsTrue)print(保持维度结果:,sum_keep)# [[10]# [26]# [42]]print(保持维度形状:,sum_keep.shape)# (3, 1) -- 注意还是2维矩阵输出结果原始形状:(3,4)------------------普通求和结果:[102642]普通求和形状:(3,)-------------------保持维度结果:[[10][26][42]]保持维度形状:(3,1)可以看到加了keepdimstrue之后还保持了二维数组的结构在计算时不易出错。np.sum()的内置参数参数功能说明示例axis指定沿哪个轴维度进行求和。np.sum(matrix, axis0)keepdims求和后保持结果的维度不变方便后续的广播运算。np.sum(matrix, axis1, keepdimsTrue)where根据布尔条件进行选择性求和。np.sum(arr, wherearr 0)(只对正数求和)dtype指定求和结果的数据类型可防止整数溢出。np.sum(arr, dtypenp.float64)initial设置求和的初始值。np.sum([1, 2], initial10)(结果为13)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2459046.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!