ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Numpy,向量,矩阵

Numpy,向量,矩阵 Numpy,向量,矩阵引言夹逼准则(放缩思想)思路:一个量被两个量从左右限制如果两边都趋近于同一个值那么中间量也趋近于这个值推理公式如果An≤Bn≤CnA_n \leq B_n \leq C_nAn​≤Bn​≤Cn​并且lim⁡n→∞AnL\lim_{n\to\infty} A_n Llimn→∞​An​Llim⁡n→∞CnL\lim_{n\to\infty} C_n Llimn→∞​Cn​L那么lim⁡n→∞BnL\lim_{n\to\infty} B_n Llimn→∞​Bn​L课程定位与应用背景课程主题学习numpy、向量和矩阵作为计算机科学数学母语的“第二组字母ˮ。底层应用广泛向量和矩阵是人工智能、数据科学和计算机图形学的底层基础。神经网络每一层计算均为矩阵乘法。图像处理图像本身表示为矩阵。推荐系统用户与物品之间的评分关系通过矩阵表达。3D 游戏与图形学角色旋转与变换依赖矩阵乘法。大语言模型Transformer 架构内部全是矩阵运算。历史背景哈密顿与四元数的发明历史背景爱尔兰数学家威廉·罗恩·哈密顿在 1843 年散步时灵光乍现发明了四元数来解决三维空间点的表示问题。核心定义提出四个分量而非三个其公式满足 i2 j2 k2 ijk −1。实际应用四元数被广泛应用于计算机图形学、机器人姿态控制及航空航天器控制中。凯莱与矩阵的诞生历史背景英国数学家阿瑟·凯莱在 1858 年发表《矩阵论》定义了矩阵加法、乘法、单位矩阵和逆矩阵。非交换性解释矩阵代表线性变换如旋转、缩放由于复合变换的顺序不同会导致结果不同因此矩阵乘法不满足交换律AB ≠ BA。思想延伸矩阵的非交换性与高中数学中的“放缩法ˮ有异曲同工之妙均涉及不等式传递性与中间量的寻找。格拉斯曼与向量空间理论历史背景德国数学家赫尔曼·格拉斯曼自学成才在代表作《线性扩张论》中提出了超前于时代的代数思想。核心理论贡献定义了向量空间、线性无关、维数、内积和外积。学术影响滞后因思想过于超前且晦涩难懂该书在当时销量惨淡直到他去世几十年后才被学界认可。核心结论向量空间是现代线性代数的核心概念。高斯与数学王子贡献人物地位高斯被誉为数学王子与阿基米德、牛顿、欧拉并列人类四大科学家。名言与座右铭“宁可少但要成熟ˮ“数学是科学的女皇数论是数学的女皇ˮ。早年天赋展现9 岁时快速计算出 1 到 100 的求和数列公式14 岁获公爵资助全额资助求学。主要成就突破少年时期独立发现最小二乘法19 岁用代数证明正 17 边形可尺规作图从而坚定终身研究数学的决心。代数基本定理: 在 1799 年提出证明了任意 n 次多项式方程在复数域内都有 n 个根。数论奠基: 24 岁时出版《算术研究》被誉为数论的“宪章ˮ其中包含了二次互反律。最小二乘法: 为预测谷神星轨道而发展成为统计学和机器学习的基础方法。微分几何: 在哥廷根天文台主导大地测量创立了曲率理论为黎曼几何和广义相对论奠定了基础。非欧几何: 早于罗巴切夫斯基等人发现了非欧几何但未公开发表。物理研究: 与韦伯合作研究地磁绘制了世界上第一张地球磁场图并发明了电报原型。向量与矩阵的基础知识向量向量的定义:既有大小又有方向的量向量的来源物理: 加速度,力,位移等几何: 有向线段计算机: 特征,嵌入,权重计算机中的向量:特征向量: 描述事物属性的数字清单用于 AI 中的图像、文本识别。嵌入向量: 将文字、图像等信息转化为稠密向量的技术是特征向量的升级版。权重向量: 神经网络中用于衡量各特征重要程度的参数。矩阵矩阵的定义:二维数字表格矩阵的来源:源于线性方程组的求解和数据变换线性方程组 矩阵就是线性方程组的简写x2y3z10 [1,2,3][x] [10] 4x5y6z20 [4,5,6][y] [20] 7x8y9z30 [7,8,9][z] [30]数据的变换矩阵的用途: 用于批量处理数据如处理班级学生成绩、用户-物品评分矩阵等。向量和矩阵作用为什么需要向量向量让我们可以用数学来处理多维矩阵为什么需要矩阵关系复杂, 矩阵让我们可以批量处理数据并行运算Weight 权重向量/权重矩阵 模型内部额参数向量描述特征有多么重要Numpy 库的作用与原理为何需要 NumPy?Python 原生列表处理数组运算速度极慢NumPy 数组基于 C 语言实现,速度更快,利用 SIMD[Single Instruction, Multiple Data]单指令多数据流技术能对整个数组进行高效运算速度提升数百倍。 - 不需要循环就可以对整个数组进行运算与 GPU 的区别:NumPy 利用 CPU 的 SIMD 指令进行中小规模数组的快速计算而 GPU更适合大规模并行计算两者定位和适用场景不同。向量与矩阵运算向量这是一个三维向量有大小有反向v [1, 2, 3]向量加法运算[1, 2, 3][4, 5, 6][5, 7, 9]向量数乘 每个向量乘以一个数2 * [1,2,3] [2,4,6]向量点积 对应分量相乘再求和[1,2,3]· [4,5,6] 12 25 3*6 32点积的几何意义a⋅b∣a∣∣b∣cos⁡θ \mathbf{a}\cdot\mathbf{b} |\mathbf{a}||\mathbf{b}|\cos\thetaa⋅b∣a∣∣b∣cosθ其中a,b\mathbf{a},\mathbf{b}a,b两个向量∣a∣,∣b∣|\mathbf{a}|,|\mathbf{b}|∣a∣,∣b∣两个向量的长度θ\thetaθ两个向量的夹角cos⁡θ\cos\thetacosθ夹角的余弦值点积反映了两个向量的方向关系θ0∘\theta0^\circθ0∘方向完全相同cos⁡θ1\cos\theta1cosθ1点积最大θ90∘\theta90^\circθ90∘两个向量垂直cos⁡θ0\cos\theta0cosθ0点积为 0θ180∘\theta180^\circθ180∘方向完全相反cos⁡θ−1\cos\theta-1cosθ−1点积为负矩阵定义:二维数字表格这是2*3 矩阵2行3列A [[1,2,3],[4,5,6]]矩阵加法:对应元素相加[[1,2],[3,4]] [[5,6],[7,8]] [[6,7],[10,11]]矩阵乘法行乘列[[1,2],[3,4]] x [[5,6],[7,8]] [[1*52*7,1*62*8],[3*54*7,3*64*8]][[19,22],[43,50]]Numpy 数组importnumpyasnpprint(Numpy Version:,np.__version__)一维数组# 一维数组vnp.array([1,2,3,4,5,6,7,8,9])print(向量 v,v)print(形状 shape,v.shape)print(维度 ndim,v.ndim)二维数组# 二维数组(矩阵)Anp.array([[1,2],[3,4]])print(矩阵 A ,A,sep\n)print(形状 shape,A.shape)print(维度 ndim,A.ndim)向量运算向量的加法,点积,范数# 向量的加法,点积,范数v1np.array([1,2,3])v2np.array([4,5,6])print(v1v2 ,v1v2)print(v1*v2,v1*v2)print(v1·v2,np.dot(v1,v2))print(v1·v2,(v1*v2).sum())范数 向量的长度模长norm_v1np.linalg.norm(v1)print(|v1| ,norm_v1)向量的夹角# 向量的夹角cos_thetanp.dot(v1,v2)/(np.linalg.norm(v1)*np.linalg.norm(v2))anglenp.degrees(np.arccos(cos_theta))print(f夹角{angle:.1f}度)向量夹角和模的验证# 向量的夹角的验证anp.array([1,0])bnp.array([0,1])print(a · b,np.dot(a,b),--垂直)# 向量模的验证vnp.array([3,4])unit_vv/np.linalg.norm(v)print(f单位向量 {unit_v},长度{np.linalg.norm(unit_v)})矩阵运算乘法 矩阵变换的几何意义# 乘法 矩阵变换的几何意义Anp.array([[1,2],[3,4]])Bnp.array([[5,6],[7,8]])print(A B:,A B,sep\n)print(A * B:,A*B,sep\n)thetanp.pi/4Rnp.array([[np.cos(theta),np.sin(theta)],[np.sin(theta),np.cos(theta)]])vnp.array([1,0])v_rotatedR vprint(f原向量{v}旋转45度后{v_rotated})print(f长度保持不变|v|{np.linalg.norm(v):.3f},|Rv|{np.linalg.norm(v_rotated):.3f})实战1 数组运算 vs 列表运算 计算速度importtimeimportrandomimportnumpyasnpfromfunctoolsimportwrapsdeftimer(func):wrapsdefwrapper(*args,**kwargs):starttime.perf_counter()try:returnfunc(*args,**kwargs)finally:elapsedtime.perf_counter()-startprint(ff{func.__name__}执行耗时:{elapsed:.6f}秒)returnwrapper nums10000arr1[random.random()for_inrange(nums)]arr2[random.random()for_inrange(nums)]np1np.array(arr1)np2np.array(arr2)# 列表 vs 数组 列表相加: 直接相加表示两个列表合并 print(**20列表 vs 数组**20)starttime.perf_counter()arrarr1arr2 stoptime.perf_counter()print(f两个列表合并,耗时:,stop-start)starttime.perf_counter()arr_add[xyforx,yinzip(arr1,arr2)]stoptime.perf_counter()print(f两个列表逐个元素相加,耗时:,stop-start)starttime.perf_counter()npnp1np2 stoptime.perf_counter()print(f数组相加,耗时:,stop-start)# 列表 - vs 数组 -print(**20列表- vs 数组**20)starttime.perf_counter()arr_add[xyforx,yinzip(arr1,arr2)]stoptime.perf_counter()print(f两个列表逐个元素相减,耗时:,stop-start)starttime.perf_counter()npnp1-np2 stoptime.perf_counter()print(f数组相减,耗时:,stop-start)# 列表 vs 数组print(**20列表* vs 数组***20)starttime.perf_counter()arr_add[x*yforx,yinzip(arr1,arr2)]stoptime.perf_counter()print(f两个列表逐个元素相乘,耗时:,stop-start)starttime.perf_counter()npnp1*np2 stoptime.perf_counter()print(f数组相乘,耗时:,stop-start)# 列表 vs 数组print(**20列表/ vs 数组/**20)starttime.perf_counter()arr_add[x/yforx,yinzip(arr1,arr2)]stoptime.perf_counter()print(f两个列表逐个元素相除,耗时:,stop-start)starttime.perf_counter()npnp1/np2 stoptime.perf_counter()print(f数组相除,耗时:,stop-start)实战2 图片就是矩阵importmatplotlib.pyplotaspltimportnumpyasnp imgnp.zeros((28,28),dtypenp.uint8)print(图片的形状:,img.shape)print(非零像素数,(img0).sum())plt.imshow(img,cmapgray)plt.axis(off)plt.show()pythonimportmatplotlib.pyplotaspltimportnumpyasnp imgnp.zeros((28,28),dtypenp.uint8)print(图片的形状:,img.shape)print(非零像素数,(img0).sum())plt.imshow(img,cmapgray)plt.axis(off)plt.show()pythonimg np.zeros((28, 28), dtypenp.uint8)img[14:] 255plt.imshow(img, cmap“gray”)plt.axis(“off”)plt.show()![图片就是矩阵](https://i-blog.csdnimg.cn/direct/2000d43ac11a4a0ba858086060bc616a.png#pic_center) python img np.zeros((28, 28), dtypenp.uint8) img[:14] 255 plt.imshow(img, cmapgray) plt.axis(off) plt.show()#MCS #Mathematics #Maths #Yibo #翊博 #翊博在这里 #菲尔兹奖 #yibohere
返回列表