Numpy中matrix必须是2维的,但是 numpy中array可以是多维的(1D,2D,3D····ND)。matrix是array的一个小的分支,包含于array。所以matrix 拥有array的所有特性。

matrix() 和 array() 的区别,主要从以下方面说起:

矩阵生成方式不同

importnumpy as np

a1= np.array([[1, 2], [3, 4]])

b1= np.mat([[1, 2], [3, 4]])

a2= np.array(([1, 2], [3, 4]))

b2= np.mat(([1, 2], [3, 4]))

a3= np.array(((1,2), (3,4)))

b3= np.mat(((1,2), (3,4)))

b4= np.mat(‘1 2; 3 4‘)print("\n",a1,"\n",b1,"\n",a2,"\n",b2,"\n",a3,"\n",b3,"\n",b4)

结果均为:

[[1 2]

[3 4]]

上述变化就是将 “[]” 换成“()”。不同之处在于  b4 内用引号、空格和分号来产生矩阵,这个方法只可以在  matrix() 函数中使用,即b4 = np.mat(‘1 2; 3 4‘)。不可以写成的 a4 = np.array(‘1 2; 3 4‘) 。

矩阵性质不同

matrix()和 array ()后面加上 .T 得到转置。但是matrix()还可以在后面加 .H 得到共轭矩阵, 加 .I 得到逆矩阵, array()就不可以。

importnumpy as np

a1= np.array([[1, 2], [3, 4]])

b1= np.mat([[1, 2], [3, 4]])print(a1.T)print(b1.T)

[[1 3]

[2 4]]

[[1 3]

[2 4]]

importnumpy as np

a1= np.array([[1, 2], [3, 4]])print(a1.H)

AttributeError: ‘numpy.ndarray‘ object has no attribute ‘H‘

print(a1.I)

AttributeError: ‘numpy.ndarray‘ object has no attribute ‘I‘

importnumpy as np

b1= np.mat([[1, 2], [3, 4]])print(b1.H)print(b1.I)

[[1 3]

[2 4]]

[[-2.   1. ]

[ 1.5 -0.5]]

在矩阵乘法中的不同

array()的乘法是矩阵中对应位置的两个数相乘

mat()的乘法是矩阵乘法

importnumpy as np

a1= np.array([[1, 2], [3, 4]])

c1= np.array([[5,6],[7,8]])

b1= np.mat([[1, 2], [3, 4]])

d1= np.mat([[5,6],[7,8]])print("a1乘c1的结果:",a1*c1)print("b1乘d1的结果:",b1*d1)

a1乘c1的结果: [[ 5 12]

[21 32]]

b1乘d1的结果: [[19 22]

[43 50]]

array()和mat(),若让他们都遵循矩阵乘法,可以用dot()函数

print(np.dot(a1,c1))print(np.dot(b1,d1))

[[19 22]

[43 50]]

[[19 22]

[43 50]]

矩阵平方:array()的平方是矩阵对应位置数的平方。mat()的平方是矩阵乘积

print("a1的平方",a1**2)print("b1的平方",b1**2)

a1的平方 [[ 1 4]

[ 9 16]]

b1的平方 [[ 7 10]

[15 22]]

总结

array()乘法:*代表点乘(对应元素相乘),dot()代表矩阵乘。

mat()乘法:*代表矩阵乘,multiply()代表点乘。

array()和mat()之间的转换

array()——>mat():np.asmatrix()

a1 = np.array([[1,2], [3,4]])

a1

array([[1, 2],

[3, 4]])

a2 =np.asmatrix(a1)

a2

matrix([[1, 2],

[3, 4]])

mat()——>array():np.asarray()

b1 = np.mat([[1,2], [3,4]])

b1

matrix([[1, 2],

[3, 4]])

b2 =np.asarray(b1)

b2

array([[1, 2],

[3, 4]])

np.multiply

对 array 和 matrix 对象的操作相同

(1) a 和 b 维度相同

都是每行对应元素相乘(即对应内积的第一步,不求和)

>>> a = np.array([[1,2],[1,2]])>>> a*a>>> array([[1, 4],

[1, 4]])

(2)对于两个矩阵元素 a 和 b 维度不一的情况(array 和 matrix 对象都适用),则需将相应的行和列进行扩充,需要扩充的行或列的维度必须为 1。

对列扩充则补 1, 对行扩充则将第一行复制到每一行。比如,a:3 * 1, b: 1 * 2,则 a 扩充为 3 * 2,b 扩充为 3 * 2。

如下所示:

>>> a = np.array([[1],[1],[1]])>>> b = np.array([1,2])>>>np.multiply(a, b)>>> array([[1, 2],

[1, 2],

[1, 2]])

(3)a 和 b为标量:则标量直接相乘

*

(1)对于 matrix 对象,代表矩阵乘法(维度必须满足相应规则);

(2)对于array对象,则是每行对应元素相乘。当 array 对象的 shape 不同时(matrix 对象不行) ,其规则和 np.multiply 一样;

np.matmul

该函数对 array 和 matrix 对象的操作是不一样的。

(1)对于 matrix 对象,对应矩阵乘法,对象维度必须满足矩阵乘法规则。

(2)对于 array 对象,对应内积,但对象维度必须相同,不支持维度扩展。

(3)不支持标量运算。

在array 中,与 multiply 一样,每行对应元素相乘

np.dot

对于matrix 对象,对应矩阵乘法。

对于两个 array 类型的元素:a,b,有如下可能:

(1)a 和 b 都是一维 array,那么 dot 就是它们的内积(点乘);

(2)a 和 b 都是二维 array,那么 dot 就是它们的矩阵乘积(即按矩阵乘法规则来计算),也可以用 matmul 或 a @ b;

(3)如果a 和 b 都是标量(scalar),那么 dot 就是两个数的乘积,也可以用 multiply 或 a * b;

(4)若 a:N * D,b:1 * D,那么 dot 为 a 的每一行和 b (只有一行)的 内积;

>>>a = a = np.array([[1,2], [3, 4]])>>>b = np.array([1, 2])>>>np.dot(a, b)>>>array([ 5, 11])

5)a:N * D,b:M * D (N >= M)a 的所有行和 b 的所有行的内积,共要计算 N * M 次,结果的 shape 为:N * M。

>>>a = a =np.array([[1, 2], [2, 3], [3, 4]])>>>b = b =np.array([[1, 2], [2, 3]])>>>np.dot(a, b)>>>array([[ 5, 8],

[8, 13],

[11, 18]])

原文:https://www.cnblogs.com/ratels/p/12235230.html

python中matrix是什么意思_Python与线性代数——Numpy中的matrix()和array()的区别相关推荐

  1. python空值填充为固定值_Python基础:numpy中空值怎样设置

    今天小编为大家带来在numpy中如何设置空值的办法,下面一起来看看吧. 我不明白为什么我会以0而不是不满足条件的空值或空值结尾... b是一个用0和1值填充的numpy数组,c是另一个完全填充的num ...

  2. python第三方库文件传输助手_python实现文件助手中查看微信撤回消息

    利用python实现防撤回,对方撤回的消息可在自己的微信文件传输助手中查看. 如果想变成可执行文件放在电脑中运行,可用pyinstaller将此程序打包成exe文件. pyinstaller 文件名. ...

  3. python 获取行列号两个数组相等_python – 寻找在numpy中找到两个相等长度数组之间精确重叠的最快方法...

    我正在寻找最佳(最快)的方法来找到numpy中两个数组之间的确切重叠.给定两个数组x和y x = array([1,0,3,0,5,0,7,4],dtype=int) y = array([1,4,0 ...

  4. python中frame是什么意思_Python实例之wxpython中Frame使用方法

    本节为大家分享的例子是wxpython Frame的用法. 例子: #!/usr/bin/python # -*- coding: GBK -*- # simple.py import wx app ...

  5. python读取字符串指定位置字符_python读取txt文件中特定位置字符的方法

    python读取txt文件中特定位置字符的方法 如下所示: # -*- coding:utf-8 -*- import sys reload(sys) sys.setdefaultencoding(' ...

  6. python将姓王的都改成老王_Python 实现将numpy中的nan和inf,nan替换成对应的均值

    inf:infinity;正无穷 numpy中的nan和inf都是float类型 t!=t 返回bool类型的数组(矩阵) np.count_nonzero() 返回的是数组中的非0元素个数:true ...

  7. python all和any用法_Python基础:numpy中any()和all()的用法

    在掌握了numpy的基础知识后,本篇文章主要介绍numpy.array下,any()和all()函数的用法. 1.简介:numpy.array.any()和numpy.array.all(),以下都用 ...

  8. Python数据分析 1-5 NumPy中ufunc函数(一)主要介绍NumPy中常用的通用函数:基本数学函数、三角函数和反三角函数和统计类函数

    1 引入NumPy #引入numpy import numpy as np np.__version__ '1.20.1' 2 基本数学函数 NumPy中基本数学函数有加法.减法.乘法.除法.乘方.开 ...

  9. python试题for循环布尔值_Python自我修炼(升仙中....整数,布尔值,字符串,for循环)

    索引(下标) 索引就是下标,下标从0开始,取值时索引所选长度不可以超过其本身. s1 = "python学习" print(s1[0]) # 获取第0个索引所对应的的元素. pri ...

最新文章

  1. ubuntu安装thrift
  2. Android移动开发之【通往安卓的神奇之旅】Android的五大布局和AndroidManifest
  3. python中可以用中文作为变量-python里能不能用中文
  4. [转]oracle中查询指定行数的记录
  5. error LNK2001: 无法解析的外部符号 __imp__Shell_NotifyIconA@8
  6. html总结:文本框填满表格
  7. oracle 导入导出指定表
  8. Java案例:读取文本文件部分内容
  9. 一维数组求平均值c语言编程软件,请问一道c++编程:求一维数组中全部元素的平均值?...
  10. Java EE开发四大常用框架
  11. 简单干净的C#方法设计案例:SFCUI.AjaxValue()之二
  12. Tomcat 服务器—安装、配置、启动、停止
  13. [Swift]LeetCode311. 稀疏矩阵相乘 $ Sparse Matrix Multiplication
  14. vmd分解matlab程序,matlab中使用VMD(变分模态分解)
  15. 阳历转阴历,阳历转中国农历
  16. java 门票订购系统_基于jsp的景区门票订购系统-JavaEE实现景区门票订购系统 - java项目源码...
  17. 小学生计算机课记录表,小学信息技术听课记录
  18. 弱光图像增强(Low-light image enhancement)资料整理(更新中...)
  19. 利用好 git bisect 这把利器,帮助你快速定位疑难 Bug
  20. python之路金角大王_python 之路,致那些年,我们依然没搞明白的编码

热门文章

  1. 上传文件500 -内部服务器错误,怎样上传文件
  2. 中金数据联手华为深入布局行业云
  3. PDN设计关键点之滤波电容位置
  4. pygraphviz的安装与红黑树可视化
  5. Mycat数据库中间件(史上最详细)
  6. nslookup命令详解和实战例子(全)
  7. MediaPlayer无法成功切换歌曲:setDataSource(FileDescriptor fd)的问题
  8. 虚拟机总是安装不上?可以试试360软件管家
  9. C++保存与读取matlab的mat文件
  10. 中兴视觉大数据报道:人工智能发展史上的起起伏伏