首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Numpy常用属性和函数(三)

Numpy常用属性和函数(三)

作者头像
用户6021899
发布于 2019-08-14 08:37:55
发布于 2019-08-14 08:37:55
39900
代码可运行
举报
运行总次数:0
代码可运行

本篇介绍Numpy中的与矩阵(Matrix)相关的常用函数。

  • 创建矩阵

1. 直接创建

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> A = np.mat([[1,2],[3,4]])#列表
>>> A
matrix([[1, 2],
        [3, 4]])
>>> B=np.mat("3,2,1;7,6,8")#数字字符串

>>> B
matrix([[3, 2, 1],
        [7, 6, 8]])
>>> C = np.mat(((1,2),(3,4)))#元组
>>> C
matrix([[1, 2],
        [3, 4]])
        

2. 从numpy数组创建矩阵

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> a=np.array([[1,2],[3,4]])
>>> np.mat(a)
matrix([[1, 2],
        [3, 4]])

3. 从已有矩阵中通过bmat函数创建

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> A = np.mat(np.eye(2))
>>> A
matrix([[1., 0.],
        [0., 1.]])
>>> B = A*2
>>> B
matrix([[2., 0.],
        [0., 2.]])
>>> np.bmat("A B; B A")
matrix([[1., 0., 2., 0.],
        [0., 1., 0., 2.],
        [2., 0., 1., 0.],
        [0., 2., 0., 1.]])
  • 矩阵的加法、减法、乘法、数乘,对应元素相乘 >>> A = np.mat(np.eye(2)) >>> A matrix([[1., 0.], [0., 1.]]) >>> B = A*2#数乘 >>> B matrix([[2., 0.], [0., 2.]]) >>> A+B matrix([[3., 0.], [0., 3.]]) >>> A-B matrix([[-1., 0.], [ 0., -1.]]) >>> A*B #矩阵乘法 matrix([[2., 0.], [0., 2.]]) >>> A = np.mat([[1,2],[3,4]]) >>> A*A #矩阵乘法 matrix([[ 7, 10], [15, 22]]) >>> np.multiply(A,A) #同形矩阵对应元素相乘 matrix([[ 1, 4], [ 9, 16]])
  • 矩阵的转置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> A = np.mat(np.random.rand(3,2))
>>> A
matrix([[0.88548289, 0.32510849],
        [0.4915165 , 0.52896972],
        [0.32423831, 0.59844983]])
>>> A.T
matrix([[0.88548289, 0.4915165 , 0.32423831],
        [0.32510849, 0.52896972, 0.59844983]])
  • 方阵的行列式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> A = np.random.randn(3,3)
>>> A = np.mat(A)
>>> A
matrix([[ 0.62735613, -0.58155189,  0.33313612],
        [-0.56945614,  1.02485754,  0.16677127],
        [-0.54911992, -0.80337017,  1.68631462]])
>>> np.linalg.det(A) #需用到线性代数子库linalg
1.0029561427173685
  • 矩阵的秩
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> A=np.mat([[1,2,3],[2,4,6]])
>>> np.linalg.matrix_rank(A)
1
>>> B=np.mat([[1,2,3],[2,4,5]])
>>> np.linalg.matrix_rank(B)
2

矩阵的的逆矩阵

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> A = np.random.randn(3,3)
>>> A= np.mat(A)
>>> A
matrix([[-0.01513886,  0.90067747, -0.97224512],
        [-0.49613961, -0.96700178, -1.28164602],
        [-1.16368445, -0.3528249 , -1.0021803 ]])
>>> A.I #前提是det(A)不为0
matrix([[ 0.28535139,  0.68764824, -1.1562322 ],
        [ 0.54883314, -0.61618317,  0.25557115],
        [-0.52455728, -0.58153289,  0.25476211]])
>>> A**(-1)
matrix([[ 0.28535139,  0.68764824, -1.1562322 ],
        [ 0.54883314, -0.61618317,  0.25557115],
        [-0.52455728, -0.58153289,  0.25476211]])
>>> A*A.I #由于精度问题,结果近似为单位矩阵
matrix([[ 1.00000000e+00, -8.96322141e-17, -1.70539774e-18],
        [-1.51263266e-16,  1.00000000e+00,  2.74501368e-17],
        [-2.67373528e-17,  1.46098928e-17,  1.00000000e+00]])
  • 求解线性方程组 A*X = B
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> A = np.mat("1,3;5,2")
 >>>B=np.mat([[11], [16]])
>>> X=np.linalg.solve(A,B) #det(A)!=0时,X=A.I * B
>>> X
matrix([[2.],
        [3.]])
>>> A*X == B #验证
matrix([[ True],
        [ True]])
  • 特征值和特征向量

如果向量v与变换A满足Av=λv,则称向量v是变换A的一个特征向量,λ是相应的特征值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> A = np.mat(np.random.randn(3,3))
>>> A
matrix([[ 0.42631062,  2.64734627, -2.11149817],
        [-1.23947749, -0.63390069,  0.42119854],
        [ 0.61590965, -0.23284082,  0.47037727]])
>>> eigenvalues,eigvector=np.linalg.eig(A)
>>> eigenvalues #特征值为数组
array([0.04862084+2.07208694j, 0.04862084-2.07208694j,
       0.16554552+0.j        ])
>>> eigvector #特征向量为矩阵
matrix([[ 0.82817694+0.j        ,  0.82817694-0.j        ,
         -0.1429864 +0.j        ],
        [-0.19877709+0.45047014j, -0.19877709-0.45047014j,
          0.62570857+0.j        ],
        [-0.10108359-0.2479302j , -0.10108359+0.2479302j ,
          0.76684006+0.j        ]])
  • 奇异值分解(SVD) 假设M是一个m×n阶矩阵,其中的元素全部属于域 K,也就是实数域或复数域。如此则存在一个分解使得

其中U是m×m阶酉矩阵;Σ是半正定m×n阶对角矩阵;而V*,即V的共轭转置,是n×n阶酉矩阵。这样的分解就称作M的奇异值分解。Σ对角线上的元素Σi,其中Σi即为M的奇异值。 常见的做法是为了奇异值由大而小排列。如此Σ便能由M唯一确定了。(虽然U和V仍然不能确定)

  • 奇异值分解(SVD)原理可在机器学习中给数据降维。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> A =np.mat("2 6 14;8 3 2")
>>> A
matrix([[ 2,  6, 14],
        [ 8,  3,  2]])
>>> U,sigma,V=np.linalg.svd(A,full_matrices=False)
>>> U
matrix([[-0.94566125, -0.3251535 ],
        [-0.3251535 ,  0.94566125]])
>>> sigma
array([16.04113167,  7.46204361])
>>> V
matrix([[-0.28006444, -0.41452362, -0.86587186],
        [ 0.92668756,  0.11874264, -0.35658147]])
>>> U*np.diag(sigma)*V #验证。结果等于A(有误差)
matrix([[ 2.,  6., 14.],
        [ 8.,  3.,  2.]])
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
【详解】Spring-Cachekey设置注意事项
在现代的Web应用中,缓存是提高系统性能和响应速度的重要手段之一。Spring框架提供了强大的缓存支持,通过​​@Cacheable​​、​​@CachePut​​、​​@CacheEvict​​等注解可以方便地实现缓存功能。然而,正确设置缓存键(Cache Key)对于确保缓存的有效性和准确性至关重要。本文将探讨在使用Spring Cache时设置缓存键的一些注意事项。
大盘鸡拌面
2025/01/02
1720
一个注解,搞定 SpringBoot 操作日志
tenant是代表租户的标识,一般一个服务或者一个业务下的多个服务都写死一个 tenant 就可以
业余草
2021/03/04
1K0
一个注解,搞定 SpringBoot 操作日志
SpringBoot 操作日志
tenant 是代表租户的标识,一般一个服务或者一个业务下的多个服务都写死一个 tenant 就可以
南风
2021/08/24
1.1K0
SpringBoot 操作日志
使用ApiBoot Logging进行统一管理请求日志
ApiBoot Logging通过集成minbox-logging来进行管理每一次请求的日志信息,包含头信息、参数、主体内容、路径、发生的服务器相关信息等,根据接口的响应状态还可以记录响应的头信息、响应的内容以及发生异常时的堆栈信息。
恒宇少年
2019/10/18
6800
使用ApiBoot Logging进行统一管理请求日志
log-record正式版本发布:自定义函数、手动传递上下文 、本地监听支持
之前写了两篇文章,来介绍我的log-record开源项目(优雅记录操作日志)是如何诞生的。
Rude3Knife的公众号
2022/01/20
1.3K0
log-record正式版本发布:自定义函数、手动传递上下文 、本地监听支持
Spring cloud 之多种方式限流(实战)
在频繁的网络请求时,服务有时候也会受到很大的压力,尤其是那种网络攻击,非法的。这样的情形有时候需要作一些限制。例如:限制对方的请求,这种限制可以有几个依据:请求IP、用户唯一标识、请求的接口地址等等。
程序猿Damon
2020/05/25
3.4K0
Spring cache 使用Redis做分布式缓存
DemoApplication启动类头部加入@EnableCaching开启缓存 redis.config配置
阿提说说
2022/12/02
6060
分布式调度框架Quartz衍生出的三种任务类型,你用过几个?
Quartz内部没有明确的任务类型的概念,在ApiBoot中对其进行封装后才确切的定义了这个概念,可以根据业务场景按需选择适合的任务类型来构建执行的任务。
恒宇少年
2019/12/26
4220
spring redis实现注解缓存
使用缓存的方式很多,有基于工具类手动操作的,也有基于注解的,各有千秋,接下来将借助spring+redis实现基于注解的缓存使用.
叔牙
2020/11/19
8100
spring redis实现注解缓存
SpringBoot整合SpringCache的简单使用和介绍
SpringBoot整合SpringCache做缓存操作,以下操作基于SpringBoot 2.4.5版本
是小张啊喂
2021/05/13
6170
springBoot高级
1、在springBoot中可以使用注解式开发缓存,默认没有开启缓存中间件,那么使用的就是存储在Map中的原理,但是我们还可以配置自己的缓存中间件,比如redis
爱撒谎的男孩
2019/12/31
6700
SpringSecurity
认证 是为用户建立一个他所声明的主体。主体一般是指用户,设备或可以在你系 统中执行动作的其他系统。 登录过程
JokerDJ
2023/11/27
2090
SpringSecurity
Spring-SpEL表达式[通俗易懂]
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说Spring-SpEL表达式[通俗易懂],希望能够帮助大家进步!!!
Java架构师必看
2022/08/26
1K0
ApiBoot Logging使用RestTemplate透传链路信息
在上一篇文章【ApiBoot Logging使用SpringCloud Openfeign透传链路信息】中我们详细的讲解了ApiBoot Logging整合SpringCloud通过Openfeign进行透传链路信息,包括traceId(链路编号)、parentSpanId(上级单元编号)等信息。 ApiBoot Logging不仅仅可以使用Openfeign传递链路信息,还支持RestTemplate方式,本篇文章来详细的讲解下具体的使用方式。
恒宇少年
2019/11/11
5790
如何优雅地记录操作日志?
操作日志几乎存在于每个系统中,而这些系统都有记录操作日志的一套 API。操作日志和系统日志不一样,操作日志必须要做到简单易懂。所以如何让操作日志不跟业务逻辑耦合,如何让操作日志的内容易于理解,如何让操作日志的接入更加简单?上面这些都是本文要回答的问题。我们主要围绕着如何“优雅”地记录操作日志展开描述,希望对从事相关工作的同学能够有所帮助或者启发。
美团技术团队
2021/10/12
2.4K2
如何优雅地记录操作日志?
修改ApiBoot Logging日志采集的路径前缀
ApiBoot Logging支持指定单个或者多个路径的前缀进行采集,也就是我们可以指定/user/**或者/order/**下的单个或者同时指定多个路径进行采集请求日志,其他不符合Ant表达式的路径就会被忽略掉。
恒宇少年
2019/10/29
7520
SpringCache与redis集成,优雅的缓存解决方案
缓存可以说是加速服务响应速度的一种非常有效并且简单的方式。在缓存领域,有很多知名的框架,如EhCache 、Guava、HazelCast等。
java思维导图
2020/08/24
9160
SpringCache与redis集成,优雅的缓存解决方案
Spring Boot2 学习二 应用使用:
SpringBoot 对一些配置都是有默认值的但也可以直接通过 application.properties或 application.yml 直接修改 application.yml
Java_慈祥
2024/08/06
2160
Spring Boot2 学习二 应用使用:
Spring学习总结(四)——表达式语言 Spring Expression Language
Spring表达式语言(简称SpEL)是一个支持查询并在运行时操纵一个对象图的功能强大的表达式语言。SpEL语言的语法类似于统一EL,但提供了更多的功能,最主要的是显式方法调用和基本字符串模板函数。
张果
2022/05/09
1K0
Spring学习总结(四)——表达式语言 Spring Expression Language
使用Swagger2作为文档来描述你的接口信息
接口文档在前后分离的项目中是必不可少的一部分,文档的编写一直以来都是一件头疼的事情,写程序不写注释、不写文档这几乎是程序员的通病,Swagger2的产生给广大的程序员们带来了曙光,只需要在接口类或者接口的方法上添加注解配置,就可以实现文档效果,除了可以应用到单体应用,在微服务架构中也是可以使用的,只需要整合zuul就可以实现各个服务的文档整合。
恒宇少年
2019/12/20
5420
使用Swagger2作为文档来描述你的接口信息
推荐阅读
相关推荐
【详解】Spring-Cachekey设置注意事项
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档