numpy ndarray与matrix互相转换及转换时维度的变换

由于需要求数组的逆,而numpy.ndarray不能直接求逆,需要先转换为numpy.matrix类型。
ndarray转matrix:

x = np.mat(x)

matrix转ndarray:

x = x.A

需要注意的是, matrix 只能表示二维数据,用其他维度的ndarray转换为matrix后,再进行维度的变换。

顺便附上矩阵求逆:

x = x.I

矩阵转置

x = x.T

后续发现numpy 和 matrix 在计算时差别很大,故做个总结

1.生成矩阵

a = np.array([[1,2],[3,4]])
b = np.mat([[1,2],[3,4]])
print(type(a), a)
print(type(b), b)

结果为:

<class 'numpy.ndarray'> [[1 2]
 [3 4]]
<class 'numpy.matrix'> [[1 2]
 [3 4]]

2.matrix()和 array ()函数都可以通过对象后面加上 .T 得到其转置。但是matrix()还可以在后面加 .H 得到共轭矩阵, 加 .I 得到逆矩阵, array()就不可以

print(a.T)
print(b.T)
print(b.H)
print(b.I)

结果为:

[[1 3]
 [2 4]]
[[1 3]
 [2 4]]
[[1 3]
 [2 4]]
[[-2.   1. ]
 [ 1.5 -0.5]]

3.互相转换:

a1 = np.mat(a)
b1 = b.getA()
b2 = np.asarray(b)
print(type(a1), a1)
print(type(b1), b1)
print(type(b2), b2)

结果为:

<class 'numpy.matrix'> [[1 2]
 [3 4]]
<class 'numpy.ndarray'> [[1 2]
 [3 4]]
<class 'numpy.ndarray'> [[1 2]
 [3 4]]

4.乘法
(1). np.multiply,对 array 和 matrix 对象的操作相同
维度相同,都是每行对应元素相乘,不求和。
对于两个矩阵元素维度不一的情况(array 和 matrix 对象都适用),则需将相应的行和列进行扩充,需要扩充的行或列的维度必须为 1。
对列扩充则补 1, 对行扩充则将第一行复制到每一行。比如,x:3 * 1, y: 1 * 2,则 x 扩充为 3 * 2,y 扩充为 3 * 2。
如下所示:

x = np.array([[1],[1],[1]])
y = np.array([1,2])
print(np.multiply(x,y))

结果为:

[[1 2]
 [1 2]
 [1 2]]

x 和 y为标量:则标量直接相乘

(2) .*
(1)对于 matrix 对象,代表矩阵乘法(维度必须满足相应规则);
(2)对于array对象,则是每行对应元素相乘。当 array 对象的 shape 不同时(matrix 对象不行) ,其规则和 np.multiply 一样;

print(a*a)
print(b*b)
print(x*y)

结果为:

[[ 1  4]
 [ 9 16]]
[[ 7 10]
 [15 22]]
[[1 2]
 [1 2]
 [1 2]]

(3) .np.matmul
该函数对 array 和 matrix 对象的操作是不一样的。
(1)对于 matrix 对象,对应矩阵乘法,对象维度必须满足矩阵乘法规则。
(2)对于 array 对象,对应内积,但对象维度必须相同,不支持维度扩展。
(3)不支持标量运算。
在array 中,与 multiply 一样,每行对应元素相乘

print(np.matmul(a,a))
print(np.matmul(b,b))

结果为:

[[ 7 10]
 [15 22]]
[[ 7 10]
 [15 22]]
  • 似乎有点问题

(4) .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 (只有一行)的 内积;

Original: https://blog.csdn.net/weixin_43541325/article/details/115234446
Author: 下大禹了
Title: numpy ndarray与matrix互相转换及转换时维度的变换

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/762734/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Pytorch教程

    Tensor介绍 1 Tensor构建 * 张量可以直接从数据中创建。数据类型是自动推断的 张量可以从NumPy数组中创建 从另一个tensor创建 torch.rand_like…

    Python 2023年8月24日
    075
  • Unity之”诡异”的协程

    为什么说是诡异的协程呢?首先从一个案例说起吧,示例如下: 游戏目标:让小车进入到对应颜色屋子里,即可获得一分。(转弯的道路可控) 为了让小车能够平滑转弯,小车的前进方向需要和车子的…

    Python 2023年10月15日
    057
  • 循环关键字

    循环关键字 continue和break continue和break都是循环体关键字(只能出现在循环体中). 1)continue – 结束一次循环(结束当次循环)在…

    Python 2023年8月24日
    037
  • Python实战项目:为人脸照片添加口罩

    Original: https://www.cnblogs.com/123456feng/p/16182300.htmlAuthor: 蚂蚁ailingTitle: Python实…

    Python 2023年5月24日
    096
  • python读取json中多嵌套字典的键_【Python】关于json中获取多个key-value对中多层嵌套key的name…

    “RuntimeSources”: { “flask-webapp”: { “eb-flask1.3”: {…

    Python 2023年8月14日
    072
  • fastapi基本使用之:入参,返回值与异常处理

    fastapi针对前后端分离的api操作做了相当多的订制,对于体现在入参、返回值以及异常处理上。 传入的参数可以有三种, 路径参数,查询参数以及请求体。 参数的自动匹配,类型转换:…

    Python 2023年8月9日
    057
  • 从0到1搭建一个简易的在线客服问答系统(附源码)

    前言 首先我们先了解下这个概念,什么叫做 问答系统(Question Answering System,简称 QA 系统)? 其实问答系统是一个比较常见的系统,在医疗系统/电商系统…

    Python 2023年8月9日
    052
  • 关于跳跃连接 卷积网络

    在训练深度神经网络时,模型的性能随着架构深度的增加而下降。这被称为退化问题。 网络深度的增加,模型的性能下降的原因可能是什么? a,过度拟合。随着深度的增加,模型往往会过度拟合 b…

    Python 2023年10月10日
    039
  • django查询集API

    本节将详细介绍查询集的API,它建立在下面的模型基础上,与上一节的模型相同: 在内部,创建、过滤、切片和传递一个QuerySet不会真实操作数据库,在你对查询集提交之前,不会发生任…

    Python 2023年6月3日
    070
  • Python爬虫——Scrapy中请求响应、crawlspider、middleware

    目录 一、Scapy中request * 基础知识 – request response 二、Scrapy中crawlspider * crawlspider的使用 实…

    Python 2023年10月2日
    070
  • conda下多环境(environment)及spyder jupyter lab配置

    结论速递 借助conda进行多environment环境管理,并且这些enviroment都可以共用IDE spyder以及jupyter lab。由于python迭代很快,需要注…

    Python 2023年9月9日
    054
  • Matplotlib画图教程:在QT界面中嵌入三维图片

    Matplotlib画图教程:在QT界面中嵌入三维图片 需求: 做项目报告的时候,有这么一个想法,就是能通过UI随时调用matplotlib进行二维图和三维图的绘制。因此就诞生了做…

    Python 2023年8月31日
    0142
  • linux为所有用户安装conda

    背景:新建普通用户,用来运行服务,需要有运行软件的权限但搜索没有找到完整的答案,这是stackoverflow上拼接的方案主要参考stackoverflow的这篇过程还是有点长,c…

    Python 2023年9月8日
    074
  • Python 爬取公众号文章链接并生成html

    微信不提供公众号分组管理,部分公众号内容优质但更新频率低,我们通过抓取特定公众号更新解决这个问题。网上介绍的方法较多,参考各位大神的文章后,最后选择了通过公众号管理平台抓取的方法。…

    Python 2023年8月10日
    039
  • 研发效能之环境管理

    “谁把我的环境给重新部署了?”“我的环境里边的数据怎么不对了?”“谁能帮我把线上的配置同步一下到线下?” 环…

    Python 2023年10月22日
    040
  • 脚本之美│VBS 入门交互实战

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Python 2023年6月12日
    069
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球