Numpy线性代数-numpy.matmul()-程序员宅基地

技术标签: python  矩阵  机器学习  线性代数  numpy  

前言

N u m P y NumPy NumPy提供了线性代数函数库linalg,该库包含了线性代数所需的所有功能,可以看看下面的说明。

函数 内容
dot 两数组的点积
vdot 两向量的点积
inner 两数组的内积
determinant 数组的行列式
matmul 两数组的矩阵积
inv 求矩阵的逆
solve 求解线性矩阵方程

相关函数介绍

numpy.dot()numpy.dot()

numpy.vdotnumpy.vdot()

numpy.inner()numpy.inner()

numpy.determinant()numpy.determinant()

numpy.matmul()numpy.matmul()

numpy.inv()numpy.inv()

numpy.solve()numpy.solve()

numpy.matmul()

numpy.matmul()函数返回两个数组的矩阵乘积:

  • 如果任一参数的维数大于2,则将其视为存在于最后两个索引的矩阵的栈,并进行相应广播。
  • 如果任一参数是一维数组,则通过在其维度上附加 1 来将其提升为矩阵,矩阵相乘之后会将为1的维数去掉。

matmuldot的差异主要在两个方面:

  • 不允许乘标量,只能用*代替
  • matmul操作的矩阵允许将最后两个索引的矩阵的栈广播

对于二维数组

它就是矩阵乘法:

import numpy as np
a=np.array([[1,2],[3,4]])
b=np.array([[1,2],[3,4]])
ans=np.matmul(a,b)
print(ans)
[[ 7 10]
 [15 22]]

计算公式:

1 × 1 + 2 × 3 1\times 1 + 2\times 3 1×1+2×3, 1 × 2 + 2 × 4 1\times 2 + 2\times 4 1×2+2×4

3 × 1 + 4 × 3 3\times 1 + 4\times 3 3×1+4×3, 3 × 2 + 4 × 4 3\times 2 + 4\times 4 3×2+4×4

二维和一维运算

a = [[1,2],[3,4]] 
b = [1,2] 
print (np.matmul(a,b)) #b被提升为(2,1)的矩阵 b=[[1],[2]] a*b=[[5],[11]],去掉为1的维度变成[5,11]
print (np.matmul(b,a)) #b被提升为(1,2)的矩阵 b=[[1,2]] a*b=[[7,10]],去掉为1的维度变成[7,10]
[ 5 11]
[ 7 10]

维度大于二的数组

如果某一个参数是 n ( n > 2 ) ) n(n>2)) n(n>2))维的,该参数 n n n被看作一些矩阵(参数的最后两个维数为矩阵维数)的stack,而且计算时会相应的广播。

a = np.arange(2*3*4).reshape((2,3,4))
b = np.arange(2*4*3).reshape((2,4,3))
c = np.arange(1*3*4).reshape((1,4,3))
print("矩阵a:",'\n',a)
print("矩阵b:",'\n',b)
print("矩阵c:",'\n',c)

矩阵a: 
 [[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
矩阵b: 
 [[[ 0  1  2]
  [ 3  4  5]
  [ 6  7  8]
  [ 9 10 11]]

 [[12 13 14]
  [15 16 17]
  [18 19 20]
  [21 22 23]]]
矩阵c: 
 [[[ 0  1  2]
  [ 3  4  5]
  [ 6  7  8]
  [ 9 10 11]]]
  • a多维数组,被当作两个 3 × 4 3\times 4 3×4矩阵。
  • b多维数组,被当作两个 4 × 3 4\times 3 4×3矩阵。
  • c多维数组,被当作一个 4 × 3 4\times 3 4×3矩阵

np.matmul(a,b)会将a的第一个矩阵和b的第一个矩阵相乘,将a的第二个矩阵b的第二个矩阵相乘,最终得到一个 2 × 3 × 3 2\times 3\times 3 2×3×3的矩阵。

ans=np.matmul(a,b)
print(ans)
[[[  42   48   54]
  [ 114  136  158]
  [ 186  224  262]]

 [[ 906  960 1014]
  [1170 1240 1310]
  [1434 1520 1606]]]

np.matmul(a,c)c只有一个矩阵,所以它会广播一个矩阵(即复制一个原本c矩阵后两维的矩阵),这样c就变成了 2 × 4 × 3 2\times 4\times 3 2×4×3的矩阵,可以与a相乘得到一个 2 × 3 × 3 2\times 3\times 3 2×3×3的矩阵。

ans=np.matmul(a,c)
print(ans)
[[[ 42  48  54]
  [114 136 158]
  [186 224 262]]

 [[258 312 366]
  [330 400 470]
  [402 488 574]]]

乘一个标量是不被允许的,只能用*代替。

a=np.array([1,2])
print(np.matmul(a, 3))
---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

<ipython-input-23-9a91f367630a> in <module>
      1 a=np.array([1,2])
----> 2 print(np.matmul(a, 3))


ValueError: matmul: Input operand 1 does not have enough dimensions (has 0, gufunc core with signature (n?,k),(k,m?)->(n?,m?) requires 1)
print(a*3)
[3 6]
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Phoenix_ZengHao/article/details/123601243

智能推荐

基于 SpringCloud 的在线交易平台商城的设计与实现-程序员宅基地

文章浏览阅读787次,点赞14次,收藏12次。计算机毕业设计中的商城实现是一个模拟电子商务平台的综合项目,它采用SSM(Spring、SpringMVC、MyBatis)技术栈进行开发,以实现一个功能完备的在线购物系统。Spring框架负责系统的业务逻辑和事务管理,确保数据的一致性和完整性;SpringMVC作为模型-视图-控制器的实现,处理用户的HTTP请求并渲染动态网页;MyBatis则作为持久层框架,与数据库进行交云,执行CRUD操作。该商城系统通常包括用户管理、商品展示、购物车、订单处理、支付系统集成、商品搜索和推荐、用户评论等功能。通过这个项

kleopatra/gpg4win软件的使用_kleopatra软件-程序员宅基地

文章浏览阅读2.6w次,点赞24次,收藏106次。之前研究了一下RSA软件gpg,一直没弄明白,今天看了一篇博客,终于尝试成功了。转载自:http://blog.51cto.com/z00w00/2070169一、加密模式简述加密工具基于算法模式,一般分两类,一类是对称加密,一种是非对称加密。前者加密和解密使用一套密钥,常用于密码式加密;后者非对称加密,加密和解密使用两套密钥:一般为公钥加密,私钥解密。文件加密主要是为了安全,诚然..._kleopatra软件

实现nginx随机直接输出字符_set-misc-nginx-module-master-程序员宅基地

文章浏览阅读8.4k次。准备软件及第三方模块:nginx-1.9.2.tar.gzngx_devel_kit-master.zip 随机数模块的依赖模块 --add时在前面(--add-module=../nginx_module/ngx_devel_kit-master--add-module=../nginx_module/set-misc-nginx-module-master)set-misc-n_set-misc-nginx-module-master

linux ping 虚拟网卡_Linux 网桥 ping 虚拟网卡不通的原因-程序员宅基地

文章浏览阅读312次。今天这篇给自己解释了一下为什么 Linux veth0/1 + bridge ping 不通。原因都在 ip route show table local 输出里。直接上步骤:[dahui@192 ~]$ route -vKernel IP routing tableDestination Gateway Genmask Flags Metric Ref ..._local 192.168.1.2 dev veth1 proto kernel scope host src 192.168.1.2

【蓝桥杯选拔赛真题08】C++最大值最小值平均值 青少年组蓝桥杯C++选拔赛真题 STEMA比赛真题解析_蓝桥杯 c++ 最大价值-程序员宅基地

文章浏览阅读370次。C/C++最大值最小值平均值第十一届青少组蓝桥杯C++选拔赛真题一、题目要求1、编程实现输入10个正整数,以空格分隔,输出其中的最大值、最小值以及平均值,以逗号隔开_蓝桥杯 c++ 最大价值

OS上误删dbf文件,未宕机情况下的应急恢复!宕机后则无法恢复!_dbfos-程序员宅基地

文章浏览阅读301次。模拟故障:说明:本故障处理必须在删除数据文件短时间内进行操作,长时间的话数据库会检测到checkpoint或切换日志然后数据库宕机。然后就无法恢复了。==================================查看当前用户下所有表的行数统计可以先create view tbnameas select table_name tbname from user_table_dbfos

随便推点

用于arm中的c语言程序代码,基于ARM的高效C语言编程-程序员宅基地

文章浏览阅读700次。引言ARM处理器以其高性能、低功耗、低成本等优势被广泛应用于各种成功的32位嵌入式系统中。提高执行速度和减小代码尺寸是嵌入式软件设计的关键需求。尽管大多数的ARM编译器和调试器都带有性能优化工具,但是为了保证其正确性,编译器必须是稳妥和安全的,而且它还受到处理器自身结构的限制。因此,编程人员必须在理解编译器工作特点的基础上来实现代码优化。代码的优化方法较多,本文针对函数优化方法进行阐述。1 函数..._arm reset_handler可以用c语言实现吗

太清宫----老子庙-程序员宅基地

文章浏览阅读398次,点赞6次,收藏8次。太清宫 老子 太上老君 庙会

Praat将连续录制的声音文件切成小单位文件_praat切分-程序员宅基地

文章浏览阅读1.7w次,点赞4次,收藏21次。[更新日期:2019年04月22日,欢迎提出修改建议,不断更新。咨询邮件[email protected],请务必附件样例以及有问题脚本,出错提示等,否则不予回复]] 在语音研究过程中,整理语料,录音,再进行标注,是一个非常重要并且基础的步骤。在录音时比较高效的做法是让录音人一次把所有语料全部录制完成,而不是录一句保存一句。这样录出来的语音存在的问题是,在标注时,声音太长,会很难处..._praat切分

二叉树C语言实现递归的进一步提升确定不来肝一篇?_c语言假设二叉树采用二叉链表存储结构存放,结点值为int类型,设计一个递归算法-程序员宅基地

文章浏览阅读634次,点赞24次,收藏18次。目录前言构建一颗二叉树二叉树的遍历求一颗二叉树的结点个数前言由于二叉树是数据结构中偏难的一块,这里我们先熟悉二叉树的结构,再具体来实现一颗二叉树,采用手动构建二叉树的方式,帮助大家进一步理解构建一颗二叉树呈现的是一个树型结构BTNode *BinaryTreeCreate(char ch) { BTNode *newNode = (BTNode *)malloc(sizeof(BTNode)); newNode->data = ch; newNode->left = N._c语言假设二叉树采用二叉链表存储结构存放,结点值为int类型,设计一个递归算法

linux帝国cms建立目录不成功,帝国网站迁移建立目录不成功!请检查目录权限帝国CMS问题解决办法...-程序员宅基地

文章浏览阅读457次。帝国cms后台新建栏目如题提示,第一想到的就是没有权限创建文件夹,但检查过栏目取名的目录是有权限去创建的,为什么系统还会这样提示呢?这个时候要再去检查下/d/文件夹是否可写,创建栏目文件夹也将会在/d/目录下创建,如果这个文件夹不可写则会如题那样出错。以上方法都试了,还是显示建立目录不成功!请检查目录权限。为什么会出现这样的问题,会不会是因为加了手机端的插件?这时候,我把手机端暂时关闭,一刷新,居..._为什么cms生成文件后无法导致目录的变化

9.1、面向对象编程_选定具体的目标(比如:猫狗花草等等),进行父类和子类的抽象化建模,确定属性和方法;-程序员宅基地

文章浏览阅读723次。面向对象编程_选定具体的目标(比如:猫狗花草等等),进行父类和子类的抽象化建模,确定属性和方法;

推荐文章

热门文章

相关标签