python如何定义矩阵_基础 | Python下的矩阵定义 (下)
关键词:线性代数 / 矩阵 / 基本定义
矩阵对于算法就如同人对于食物般的关系,已经到了密不可分的状态了,在神经网络里,矩阵代表了每层神经元之间的链接,在集成算法里,矩阵记录了每次分类器更新的残差,在马可夫链里,矩阵表示了不同状态下的条件转移概率,矩阵的重要性已经是不言自明了。除了上集说到的方阵,子矩阵,对角矩阵,与单位矩阵之外,接着要进一步介绍一些常用且方便的矩阵,包含了以下几种矩阵类型:纯量矩阵
三角矩阵
共轭矩阵
对称矩阵
正交矩阵
当然矩阵的类型远不止如此,而这几种矩阵在了解的时候不需要太多先验知识,因此才能在一开始率先登场!
矩阵基本定义
这篇文章里的范例也都将沿用上篇文章中的定义,下面就来回顾一下标记符号的各种含义。
中的
称为矩阵的元素,可以是数字,函数,实数,复数。在 python 代码中的numpy模块几乎可以说是数值计算的唯一选择。
import numpy as np
A = np.random.randint(0, 10, 72)
A = A.reshape(9, 8)
print(A)
输出:
[[5 4 5 8 5 7 0 7]
[5 6 4 0 9 8 6 5]
[1 2 9 6 7 7 3 5]
[3 4 7 8 4 6 9 2]
[4 8 1 3 5 4 8 4]
[5 1 5 7 3 9 9 8]
[0 8 4 1 6 9 3 2]
[4 3 0 3 6 4 5 9]
[2 8 6 3 5 5 3 4]]
如果还没安装过numpy,可以使用下面指令在终端快速安装。
pip install numpy
11. 纯量矩阵 - Scalar matrix
在对角矩阵中,主对角线上的元素皆为某一常数 C 时,则称之为纯量矩阵。
c = 5
print(np.diag([c, c, c]))
输出:
[[5, 0, 0],
[0, 5, 0],
[0, 0, 5]]
12. 上三角矩阵 - Upper triangular matrix
在方阵的前提下,主对角线以下元素皆为 0 时,则称之为上三角矩阵。
print(np.triu(A))
输出:
[[5, 4, 5, 8, 5, 7, 0, 7],
[0, 6, 4, 0, 9, 8, 6, 5],
[0, 0, 9, 6, 7, 7, 3, 5],
[0, 0, 0, 8, 4, 6, 9, 2],
[0, 0, 0, 0, 5, 4, 8, 4],
[0, 0, 0, 0, 0, 9, 9, 8],
[0, 0, 0, 0, 0, 0, 3, 2],
[0, 0, 0, 0, 0, 0, 0, 9],
[0, 0, 0, 0, 0, 0, 0, 0]]
p.s. 即便一个矩阵不是方阵,同样可以取上下三角矩阵。
13. 下三角矩阵 - Lower triangular matrix
在方阵的前提下,主对角线以上元素皆为 0 时,则称之为下三角矩阵。
print(np.tril(A))
输出:
[[5, 0, 0, 0, 0, 0, 0, 0],
[5, 6, 0, 0, 0, 0, 0, 0],
[1, 2, 9, 0, 0, 0, 0, 0],
[3, 4, 7, 8, 0, 0, 0, 0],
[4, 8, 1, 3, 5, 0, 0, 0],
[5, 1, 5, 7, 3, 9, 0, 0],
[0, 8, 4, 1, 6, 9, 3, 0],
[4, 3, 0, 3, 6, 4, 5, 9],
[2, 8, 6, 3, 5, 5, 3, 4]]
14. 共轭矩阵 - Conjugate matrix
把 A 矩阵的元素皆取共轭复数后,该新的矩阵为 A 矩阵的共轭矩阵,以
表示。
B = np.array([[1+1.j, 2-1.j],
[3-2.j, 4+5.j]])
print(np.conj(B))
输出:
[[1.-1.j, 2.+1.j],
[3.+2.j, 4.-5.j]]
15. 转置矩阵 - Transpose matrix
把 A 矩阵中的行列编号互换,元素不变,只变位置后的结果称为 A 矩阵的转置矩阵,以
表示。
print(A.T)
输出:
[[5, 5, 1, 3, 4, 5, 0, 4, 2],
[4, 6, 2, 4, 8, 1, 8, 3, 8],
[5, 4, 9, 7, 1, 5, 4, 0, 6],
[8, 0, 6, 8, 3, 7, 1, 3, 3],
[5, 9, 7, 4, 5, 3, 6, 6, 5],
[7, 8, 7, 6, 4, 9, 9, 4, 5],
[0, 6, 3, 9, 8, 9, 3, 5, 3],
[7, 5, 5, 2, 4, 8, 2, 9, 4]]
16. 共轭转置矩阵 - Conjugate transpose matrix
把 A 矩阵的元素皆取共轭复数后,再取转置;或将 A 矩阵的元素先取转置后,再取共轭复数,所得到的新矩阵即为共轭转置矩阵,以
表示。
print(np.matrix(B).H)
输出:
matrix([[1.-1.j, 3.+2.j],
[2.+1.j, 4.-5.j]])
print(np.conj(B).T)
输出:
[[1.-1.j, 3.+2.j],
[2.+1.j, 4.-5.j]]
17. 对称矩阵 - Symmetrix matrix
在方阵的前提下,如果矩阵 A 的转置等于 A 本身,称之为对称矩阵。
def symmetrixIO(mat):
return np.sum(mat != mat.T) == 0
print(symmetrixIO(C))
输出:
False
18. 反对称矩阵 - Skew symmetrix matrix
在方阵的前提下,如果矩阵 A 的转置矩阵恰为 A 的相反矩阵 -A,则称之为反对称矩阵。
def skew_symmetrixIO(mat):
return np.sum(-mat != mat.T) == 0
print(skew_symmetrixIO(
np.array([[ 0, 2, 5],
[-2, 0, -7],
[-5, 7, 0]])
))
输出:
True
19. 厄米特矩阵 - Hermitian matrix
在方阵的前提下,矩阵 A 的共轭转置矩阵恰好等于原矩阵 A,则称之为厄米特矩阵。
def hermitianIO(mat):
return np.sum(mat != np.conj(mat).T) == 0
print(hermitianIO(
np.array([[ 1, 1+1.j, 5],
[1-1.j, 2, 1.j],
[ 5, -1.j, 7]])
))
输出:
True
20. 正交矩阵 - Orthogonal matrix
正交的意思就是指两个向量彼此互相垂直,而正交矩阵则进一步把垂直的概念拓展到矩阵中,矩阵里的每一个行和列向量必须彼此互相垂直,而且向量长度是1的情况下,才称之为正交矩阵。总结矩阵的规则后,我们得到在方阵的前提下,满足以下条件则称之为正交矩阵:
因此很明显的,一个正交矩阵必定是个方阵,而这一系列的条件判断同样可以被写成一个函数用来检测矩阵是否正交。
from Code.linalg import *
def orthogonalIO(mat, decimal=4):
# A^T = A^(-1)
cond1 = np.sum(np.round(mat.T, decimal) !=
np.round(inverse(mat), decimal)) == 0
# A^T . A = A . A^T
cond2 = np.sum(np.round(np.dot(mat.T, mat), decimal) !=
np.round(np.dot(mat, mat.T), decimal)) == 0
# |A| = +-1
cond3 = np.round(np.abs(determinant(mat)), decimal) == 1
return np.sum([cond1, cond2, cond3]) == 3
B = np.array([[-0.23939017, 0.58743526, -0.77305379],
[ 0.81921268, -0.30515101, -0.48556508],
[-0.52113619, -0.74953498, -0.40818426]])
print(orthogonalIO(B, decimal=4))
输出:
True
为了更深入了解矩阵的底层运算,行列式值和逆矩阵都用的是我们自定义的函数,如果想看具体实现方法,欢迎持续关注发布的文章!在这个函数中我们首先就遇到了一个很简单的理论与实际代码之间的差异,那就是小数点近似问题。由于任意行列向量必须是单位向量,常常在实际情况是一个近似的结果,因此在检测正交与否的时候也必须采用近似的方式操作。Github源代码github.com
转发、分享!微信公众号每周更新,同时每周腾讯会议在线免费分享! 关注公众号,点击按钮“AI大会”即可加入微信群(公布腾讯会议房间号),和清华师兄一起面对面讨论Ai。微信公众号
python如何定义矩阵_基础 | Python下的矩阵定义 (下)相关推荐
- python大牛 关东升_《Python从小白到大牛》第4章 Python语法基础
本章主要为大家介绍Python的一些语法,其中包括标识符.关键字.常量.变量.表达式.语句.注释.模块和包等内容. 标识符和关键字 任何一种计算机语言都离不开标识符和关键字,因此下面将详细介绍Pyth ...
- python数组相减_对Python 中矩阵或者数组相减的法则详解
对Python 中矩阵或者数组相减的法则详解 最近在做编程练习,发现有些结果的值与答案相差较大,通过分析比较得出结论,大概过程如下: 定义了一个计算损失的函数: def error(yhat,labe ...
- list python 访问 键值对_基础|Python常用知识点汇总(中)
字符串字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串.1.创建字符串 str1 = 'Hello World!' str2 = "Hello W ...
- python面试设计模式问题_聊聊 Python 面试最常被问到的几种设计模式(下)
1. 前言 上篇文章 写到了 Python 最常用的 2 种设计模式,单例模式和工厂模式 本篇文章我们继续聊聊面试中,Python 面试经常被问到的设计模式,即: 构建者模式 代理模式 观察者模式 2 ...
- 学python的正确方法_学习Python最正确的步骤(0基础必备)
首先,学习Python编程技术,自学或者参加培训学习都适用,每个人都有自己的学习方式和方法. 一:明确自己的学习目标. 不管我们学习什么样的知识,都要对自己的学习目标有一个明确的认识.只有这样才能朝着 ...
- python quit函数作用_初识Python之基础知识
安装了Anaconda3以及Jupyter notebook后对Python中的一些基础语法.定义容器,对容器做增删改,定义及调用函数做了学习,并且在notebook中实践敲了代码 数据类型:字符串( ...
- c语言与python的语法区别_来自python的C语言(基本语法),从,Python,看,基础,篇
一个学过C/C++的咸鱼,最近学起了Python,不得不说,知识还是老知识,语法也简单多了,但就是容易搞混.大致总结一下Python与C的区别,以后别张冠李戴啦,嘻嘻. Part 1.输入与输出 输 ...
- 学python数学要好吗_学习Python数学英语基础重要吗?
提到Python编程语言,大家就会想编程语言肯定会涉及到的就是代码,很多人看到那满屏的英文字母就头疼,觉得自己不会英语,肯定学不好Python,但是不会英语到底能不能够学习Python呢,下面小编给大 ...
- 初学者先学python语音好吗_献给Python初学者 零基础学习Python能学会吗
献给Python初学者 零基础学习Python能学会吗 时间:2018-01-08 来源:零基础学习Python方法讲解 零基础学习Python能学会吗?这个问题几乎是所有初学Python的小 ...
最新文章
- 过拟合、欠拟合与正则化
- 稠密仿射变换 cvWarpAffine
- ssh反向主动连接 及脚本加密
- 加密工具类 - CryptoUtils.java
- docker supervisor管理进程
- 关于Arrays类中toArray方法的总结
- pcb设计单点接地示意图_答案:关于PCB 的EMC设计知识考卷
- P2522-[HAOI2011]Problem b【莫比乌斯反演】
- VC.NET字符指针与String的转换
- shell 12 21 filename重定向的含义和区别
- Elastic-Job项目启动后,控制台一直报Cron表达式有误且Cron表达式与当前配置的表达式不一样
- 华为云发布五大新品,这个成功实践也首次对外公开
- python面试题及答案2020_2020年python面试题汇总(最新)
- 一个简单的条码/二维码扫描App
- Prolog语言及程序设计汇总
- Bug解决-RuntimeError: Sizes of tensors must match except in dimension 2. Got 320 and 160 (The offendin
- python爬取微信好友头像_使用python itchat包爬取微信好友头像形成矩形头像集的方法...
- uc浏览器手机端禁用复制
- 学习java web感想_学了近一个月的java web 感想
- efm8bb1 烧录器_EFM8BB1LCK全功能、低成本8位MCU套件开箱评测