python中数组和矩阵乘法及使用总结(推荐)

作者:manjhOK 时间:2021-11-30 04:29:31 

Matrix是Array的一个小的分支,包含于Array。所以matrix 拥有array的所有特性。

但在数组乘和矩阵乘时,两者各有不同,如果a和b是两个matrices,那么a*b,就是矩阵积

如果a,b是数组的话,则a*b是数组的运算

1.对数组的操作


>>> import numpy as np

>>> a=np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> a
array([[1, 2, 3],
   [4, 5, 6],
   [7, 8, 9]])
>>> b=a.copy()
>>> b
array([[1, 2, 3],
   [4, 5, 6],
   [7, 8, 9]])
>>> a+b#多维数组的加减,按对应位置操作
array([[ 2, 4, 6],
   [ 8, 10, 12],
   [14, 16, 18]])
>>> a*3#多维数组乘常数,则对数组中每一个元素乘该常数
array([[ 3, 6, 9],
   [12, 15, 18],
   [21, 24, 27]])
>>> np.dot(a,b)#数组的点乘运算通过np.dot(a,b)来实现,相当于矩阵乘
array([[ 30, 36, 42],
   [ 66, 81, 96],
   [102, 126, 150]])
>>> c=np.array([1,2,3])#构造一行三列的数组
>>> c
array([1, 2, 3])
>>> c*a#c为一行三列,放于数组a之前,则对数组a中每行对应位置相乘
array([[ 1, 4, 9],
   [ 4, 10, 18],
   [ 7, 16, 27]])
>>> a*c#c为一行三列,放于数组a之后,依旧是对数组a中每行对应位置相乘
array([[ 1, 4, 9],
   [ 4, 10, 18],
   [ 7, 16, 27]])
>>> #如果想要矩阵运算,则需要np.dot()函数
>>> np.dot(c,a)#c为一行三列,放于数组a之前,按正常矩阵方式运算
array([30, 36, 42])
>>> np.dot(a,c)#c为一行三列,放于数组a之后,相当于矩阵a乘以3行一列的c矩阵,返回结果值不变,格式为1行3列
array([14, 32, 50])
>>> #将c改为多行一列的形式
>>> d=c.reshape(3,1)
>>> d
array([[1],
   [2],
   [3]])
>>> #
>>> np.dot(a,d)#值与np.dot(a,c)一致,但格式以改变为3行1列
array([[14],
   [32],
   [50]])

>>> a*a#数组使用*的运算其结果属于数组运算,对应位置元素之间的运算
array([[ 1, 4, 9],
   [16, 25, 36],
   [49, 64, 81]])
>>> #但是不能更改a,d点乘的位置,不符合矩阵运算格式
>>> np.dot(d,a)
Traceback (most recent call last):
File "<pyshell#28>", line 1, in <module>
 np.dot(d,a)
ValueError: shapes (3,1) and (3,3) not aligned: 1 (dim 1) != 3 (dim 0)

对于数组的转置,求逆,求迹运算请参考上篇文章

2.对矩阵的操作


>>> a=np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> a=np.mat(a)
>>> a
matrix([[1, 2, 3],
   [4, 5, 6],
   [7, 8, 9]])
>>> b=a
>>> b
matrix([[1, 2, 3],
   [4, 5, 6],
   [7, 8, 9]])
>>> a+b#矩阵的加减运算和数组运算一致
matrix([[ 2, 4, 6],
   [ 8, 10, 12],
   [14, 16, 18]])
>>> a-b
matrix([[0, 0, 0],
   [0, 0, 0],
   [0, 0, 0]])
>>> a*b#矩阵的乘用*即可表示
matrix([[ 30, 36, 42],
   [ 66, 81, 96],
   [102, 126, 150]])
>>> np.dot(a,b)#与*一致
matrix([[ 30, 36, 42],
   [ 66, 81, 96],
   [102, 126, 150]])
>>> b*a
matrix([[ 30, 36, 42],
   [ 66, 81, 96],
   [102, 126, 150]])
>>> np.dot(b,a)
matrix([[ 30, 36, 42],
   [ 66, 81, 96],
   [102, 126, 150]])
>>> c=np.array([1,2,3])#构造一行三列数组
>>> c
array([1, 2, 3])
>>> c*a#矩阵运算
matrix([[30, 36, 42]])
>>> a*c#不合矩阵规则
Traceback (most recent call last):
File "<pyshell#63>", line 1, in <module>
 a*c
File "F:\python3\anzhuang\lib\site-packages\numpy\matrixlib\defmatrix.py", line 309, in __mul__
 return N.dot(self, asmatrix(other))
ValueError: shapes (3,3) and (1,3) not aligned: 3 (dim 1) != 1 (dim 0)
>>> np.dot(c,a)#和矩阵运算一致
matrix([[30, 36, 42]])
>>> np.dot(a,c)#自动将a转换成3行1列参与运算,返回结果格式已经变为1行3列而非3行一列的矩阵
matrix([[14, 32, 50]])
>>> c=c.reshape(3,1)
>>> c
array([[1],
   [2],
   [3]])
>>> a*c#和矩阵运算一致
matrix([[14],
   [32],
   [50]])
>>> c*a#不合矩阵运算格式
Traceback (most recent call last):
File "<pyshell#71>", line 1, in <module>
 c*a
ValueError: shapes (3,1) and (3,3) not aligned: 1 (dim 1) != 3 (dim 0)

矩阵运算的另一个好处就是方便于求转置,求逆,求迹


>>> a
matrix([[1, 2, 3],
   [4, 5, 6],
   [7, 8, 9]])
>>> a.T
matrix([[1, 4, 7],
   [2, 5, 8],
   [3, 6, 9]])
>>> a.H#共轭转置
matrix([[1, 4, 7],
   [2, 5, 8],
   [3, 6, 9]])
>>> b=np.eye(3)*3
>>> b
array([[3., 0., 0.],
   [0., 3., 0.],
   [0., 0., 3.]])
>>> b=np.mat(b)
>>> b.I#求逆运算
matrix([[0.33333333, 0.    , 0.    ],
   [0.    , 0.33333333, 0.    ],
   [0.    , 0.    , 0.33333333]])
>>> np.trace(b)#求迹运算
9.0

以上所述是小编给大家介绍的python中数组和矩阵乘法及使用总结详解整合网站的支持!

来源:https://blog.csdn.net/manjhOK/article/details/80017892

标签:python,数组,矩阵乘法
0
投稿

猜你喜欢

  • ASP/php/aspx生成静态网页的方法

    2007-10-25 12:01:00
  • Linux下PhpMyAdmin程序目录结构的安全管理

    2023-10-18 14:16:05
  • python读取Excel表格文件的方法

    2023-07-24 01:17:14
  • 一篇文章带你学习python的函数与类

    2023-10-15 05:04:18
  • 学习ASP和编程的28个观点

    2008-06-27 12:57:00
  • Python字符串str和json格式相互转换

    2023-01-21 03:26:25
  • 定义列表 dt dl

    2008-08-03 17:14:00
  • pygame游戏之旅 游戏中添加显示文字

    2023-03-26 02:56:23
  • Python用Try语句捕获异常的实例方法

    2021-07-14 10:28:54
  • SQL0290N表空间状态问题:停顿的独占处理

    2008-12-26 17:24:00
  • 合理设置内存让数据库与其他程序共存

    2009-05-21 16:24:00
  • 状态机的概念和在Python下使用状态机的教程

    2023-03-24 14:06:11
  • Python Unittest自动化单元测试框架详解

    2023-09-13 23:13:56
  • Python中关于浮点数的冷知识

    2023-11-13 14:01:57
  • php之app消息推送案例教程

    2023-06-15 00:42:02
  • 两个命令把 Vim 打造成 Python IDE的方法

    2022-01-20 09:31:31
  • pyhon如何把程序打包为whl

    2023-06-16 11:30:48
  • 再谈Python中的字符串与字符编码(推荐)

    2023-06-15 23:25:08
  • 基于Python实现五子棋游戏

    2023-01-29 21:47:42
  • python设置环境变量的原因和方法

    2023-05-12 18:31:35
  • asp之家 网络编程 m.aspxhome.com