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

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

矩阵生成方式不同

import numpy 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()就不可以。

import numpy 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]]
import numpy 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'

import numpy 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()的乘法是矩阵乘法

import numpy 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]])

矩阵乘法的性质——结合性(AB)C=A(BC)

矩阵乘法的性质——分配性(A+B)C=AC+BC,C(A+B)=CA+CB

矩阵乘法的性质——数乘的结合性

矩阵乘法的性质——一个矩阵A乘以一个单位矩阵,还是它本身

参考:https://www.cnblogs.com/keye/p/11195428.htmlhttps://blog.csdn.net/qq_42522262/article/details/86777426https://jingyan.baidu.com/article/e8cdb32b65978837042bad5b.html

Python与线性代数——Numpy中的matrix()和array()的区别的更多相关文章

  1. numpy中的matrix与array的区别

    Numpy matrices必须是2维的,但是 numpy arrays (ndarrays) 可以是多维的(1D,2D,3D····ND). Matrix是Array的一个小的分支,包含于Array ...

  2. 使用python解线性矩阵方程(numpy中的matrix类)

    这学期有一门运筹学,讲的两大块儿:线性优化和非线性优化问题.在非线性优化问题这里涉及到拉格朗日乘子法,经常要算一些非常变态的线性方程,于是我就想用python求解线性方程.查阅资料的过程中找到了一个极 ...

  3. Numpy中matrix()和array()的区别

    matrix() 和 array() 的区别,主要从以下方面说起: 1. 矩阵生成方式不同 import numpy as np a1 = np.array([[1, 2], [3, 4]]) b1 ...

  4. Python 实现将numpy中的nan和inf,nan替换成对应的均值

    nan:not a number inf:infinity;正无穷 numpy中的nan和inf都是float类型     t!=t 返回bool类型的数组(矩阵) np.count_nonzero( ...

  5. Python Pandas与Numpy中axis参数的二义性

    Stackoverflow.com是程序员的好去处,本公众号将以pandas为主题,开始一个系列,争取做到每周一篇,翻译并帮助pandas学习者一起理解一些有代表性的案例.今天的主题就是Pandas与 ...

  6. python学习笔记——多进程中共享内存Value & Array

    1 共享内存 基本特点: (1)共享内存是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝. (2)为了在多个进程间交换信息,内核专门留出了一块内存区,可以由需要访问的进程将 ...

  7. [转]numpy中的matrix矩阵处理

    今天看文档发现numpy并不推荐使用matrix类型.主要是因为array才是numpy的标准类型,并且基本上各种函数都有队array类型的处理,而matrix只是一部分支持而已. 这个转载还是先放着 ...

  8. numpy中的matrix矩阵处理

    numpy模块中的矩阵对象为numpy.matrix,包括矩阵数据的处理,矩阵的计算,以及基本的统计功能,转置,可逆性等等,包括对复数的处理,均在matrix对象中. class numpy.matr ...

  9. python的try方法中的else和finally的区别

    #coding=utf-8__author__ = '14356_000'try: print '1'except: print '2'else: print '3'finally: print '4 ...

随机推荐

  1. 查看Oracle的SID的方式

    1  使用组合键“Win + R”打开运行对话框,在输入框中输入 regedit 并回车打开“注册表编辑器”. 2   在“注册表编辑器”对话框,依次展开 HKEY_LOCAL_MACHINE\SOF ...

  2. kali&BT5下利用nmap对mysql等数据库渗透与爆破

    如今Nmap的脚本引擎从一个普通的端口扫描器转变为具有攻击性的渗透测试工具 .随着nmap各种脚本的存在.到目前为止,我们甚至可以进行完整的SQL数据库渗透而不需要任何其他的工具. 今天就在kali下 ...

  3. 【转载】C/C++编译过程分析

    转自:http://www.360doc.com/content/14/0109/16/835125_343879650.shtml C/C++编译过程 C/C++编译过程主要分为4个过程 1) 编译 ...

  4. 搭建离线下载aria2 树莓派下搭建,以及图形化界面AriaNG

    请参考链接 https://www.htcp.net/3652.html https://www.zrj96.com/post-296.html Aria2自动更新BT Tracker服务器列表的方法 ...

  5. centos默认安装mysql的默认密码

    安装centos时选择安装Mysql 服务器 mysql的默认登录密码为空,但是直接登录的时候有报错: [root@localhost bin]# mysql -u root -pEnter pass ...

  6. python中写入txt文件需要换行,以及\r 和\n

    在Python中,用open()函数打开一个txt文件,写入一行数据之后需要一个换行 如果直接用 f.write(’\n’)只会在后面打印一个字符串’\n’,而不是换行’需要用 f.write(’\r ...

  7. Linux centos7 shell 介绍、 命令历史、命令补全和别名、通配符、输入输出重定向

    一.shell介绍 shell脚本是日常Linux系统管理工作中必不可少的,不会shell,就不是一个合格管理员. shell是系统跟计算机硬件交互使用的中间介质,一个系统工具.实际上在shell和计 ...

  8. Python3 post 嵌套json

    目录 python3 post json burpsuite 抓取 python requests 数据包 小结 python3 post json 前些天python3 post出现的小问题做下记录 ...

  9. LeetCode 42接雨水 按行求解(差分+排序)

    按行求解的思路比较清晰明了,但是这个方法的复杂度高达O(heightSize*sum(height[i])),几乎高达O(N^2). 但是也并不是不可以解决,经观察我们可以发现,这个算法的缺点在于要遍 ...

  10. BZOJ 3262: 陌上花开 (cdq分治,三维偏序)

    #include <iostream> #include <stdio.h> #include <algorithm> using namespace std; c ...