NumPy学习12
今天学习了
22, NumPy矩阵乘法
23, NumPy IO操作
numpy_test12.py :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | import numpy as np ''' 22, NumPy矩阵乘法 矩阵乘法是将两个矩阵作为输入值,并将 A 矩阵的行与 B 矩阵的列对应位置相乘再相加,从而生成一个新矩阵。 注意:必须确保第一个矩阵中的行数等于第二个矩阵中的列数,否则不能进行矩阵乘法运算。 矩阵乘法运算被称为向量化操作,向量化的主要目的是减少使用的 for 循环次数或者根本不使用。 这样做的目的是为了加速程序的计算。 ''' print ( "----22, NumPy矩阵乘法----" ) ''' (1) np.multiply() multiple() 函数用于两个矩阵的逐元素乘法. ''' print ( "----(1) np.multiply()----" ) arr1 = np.array([[ 1 , 2 , 3 ], [ 4 , 5 , 6 ], [ 7 , 8 , 9 ]], ndmin = 3 ) print ( 'arr1 : ' , arr1) arr2 = np.array([[ 9 , 8 , 7 ], [ 6 , 5 , 4 ], [ 3 , 2 , 1 ]], ndmin = 3 ) print ( 'arr2 : ' , arr2) # 两个矩阵的逐元素乘法 result = np.multiply(arr1,arr2) print ( 'result : ' , result) ''' arr1 : [[[1 2 3] [4 5 6] [7 8 9]]] arr2 : [[[9 8 7] [6 5 4] [3 2 1]]] result : [[ [ 9 16 21] [24 25 24] [21 16 9]]] ''' ''' (2) np.matmul() matmul() 用于计算两个数组的矩阵乘积。 ''' print ( "----(2) np.matmul()----" ) arr3 = np.array([[ 1 , 2 , 3 ], [ 4 , 5 , 6 ], [ 7 , 8 , 9 ]], ndmin = 3 ) print ( 'arr3 : ' , arr3) arr4 = np.array([[ 9 , 8 , 7 ], [ 6 , 5 , 4 ], [ 3 , 2 , 1 ]], ndmin = 3 ) print ( 'arr4 : ' , arr4) # 两个数组的矩阵乘积 result = np.matmul(arr3,arr4) print ( 'result : ' , result) ''' arr3 : [[[1 2 3] [4 5 6] [7 8 9]]] arr4 : [[[9 8 7] [6 5 4] [3 2 1]]] result : [[ [ 30 24 18] [ 84 69 54] [138 114 90]]] ''' ''' (3) np.dot() dot() 函数用于计算两个矩阵的点积。 ''' print ( "----(3) np.dot()----" ) arr5 = np.array([[ 1 , 2 , 3 ], [ 4 , 5 , 6 ], [ 7 , 8 , 9 ],], ndmin = 3 ) print ( 'arr5 : ' , arr5) arr6 = np.array([[ 9 , 8 , 7 ], [ 6 , 5 , 4 ], [ 3 , 2 , 1 ]], ndmin = 3 ) print ( 'arr6 : ' , arr6) # 两个矩阵的点积 result = np.dot(arr5, arr6) print ( 'result : ' , result) ''' arr5 : [[[1 2 3] [4 5 6] [7 8 9]]] arr6 : [[[9 8 7] [6 5 4] [3 2 1]]] result : [[ [[ 30 24 18]] [[ 84 69 54]] [[138 114 90]] ]] ''' ''' 23, NumPy IO操作 NumPy IO 操作是以文件的形式从磁盘中加载 ndarray 对象。 在这个过程中,NumPy 可以两种文件类型处理 ndarray 对象,一类是二进制文件(以.npy结尾),另一类是普通文本文件。 上述两种文件格式,分别对应着不同的 IO 方法,如下所示: NumPy IO操作方法 文件类型 处理方法 二进制文件 load() 和 save() 普通文本文件 loadtxt() 和 savetxt() 我们知道,文件会被保存在不同的计算机上(比如 Linux、Windows、MacOSX 等)。 为了不受的计算机架构影响,NumPy 开发团队给 ndarray 对象引入了一种.npy文件格式, 通过它来件实现对 ndarray 对象的保存。 ''' print ( "----23, NumPy IO操作----" ) ''' (1) numpy.save() numpy.save() 方法将输入数组存储在.npy文件中。 numpy.save(file, arr, allow_pickle=True, fix_imports=True) 参数说明: file:保存后的文件名称,其文件类型为.npy; arr:要保存的数组 allow_pickle:可选项,布尔值参数,允许使用 pickle 序列化保存数组对象。 fix_imports:可选项,为了便于在 Pyhton2 版本中读取 Python3 保存的数据。 ''' print ( "----(1) numpy.save()----" ) arr7 = np.array([ 1 , 2 , 3 , 4 , 5 ]) print ( 'arr7 : ' , arr7) # 输入数组存储在.npy文件中 np.save( 'outfile' , arr7) print ( '输入数组存储在outfile.npy文件中' ) # 使用 load() 从 outfile.npy 文件中加载数据 arr8 = np.load( 'outfile.npy' ) print ( '从 outfile.npy 文件中加载数据' ) print ( 'arr8 : ' , arr8) ''' arr7 : [1 2 3 4 5] 输入数组存储在outfile.npy文件中 从 outfile.npy 文件中加载数据 arr8 : [1 2 3 4 5] ''' ''' (2) savetxt() savetxt() 和 loadtxt() 分别表示以文本格式存储数据或加载数据。其中 savetxt() 的语法格式如下: np.savetxt('filename文件路径', self.task, fmt="%d", delimiter=" ") 参数说明: filename:表示保存文件的路径; self.task: 要保存数组的变量名; fmt="%d": 指定保存文件的格式,默认是十进制; delimiter=" "表示分隔符,默认以空格的形式隔开。 ''' print ( "----(2) savetxt()----" ) arr9 = np.array([ 1 , 2 , 3 , 4 , 5 ]) print ( 'arr9 : ' , arr9) np.savetxt( 'outfile.txt' , arr9) print ( '输入数组存储在outfile.txt 文本文件中' ) #使用loadtxt重载数据 arr10 = np.loadtxt( 'outfile.txt' ) print ( '从 outfile.txt 文本文件中加载数据' ) print ( 'arr10 : ' , arr10) ''' arr9 : [1 2 3 4 5] 输入数组存储在outfile.txt 文本文件中 从 outfile.txt 文本文件中加载数据 arr10 : [1. 2. 3. 4. 5.] ''' |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)