NumPy学习11
今天学习了NumPy线性代数
21, NumPy线性代数
numpy_test11.py :
import numpy as np '''
21, NumPy线性代数
NumPy 提供了 numpy.linalg 模块,该模块中包含了一些常用的线性代数计算方法,
下面对常用函数做简单介绍: NumPy线性代数函数
函数名称 描述说明
dot 两个数组的点积。
vdot 两个向量的点积。
inner 两个数组的内积。
matmul 两个数组的矩阵积。
det 计算输入矩阵的行列式。
solve 求解线性矩阵方程。
inv 计算矩阵的逆矩阵,逆矩阵与原始矩阵相乘,会得到单位矩阵。
'''
print("----21, NumPy线性代数----")
'''
(1) numpy.dot()
按照矩阵的乘法规则,计算两个矩阵的点积运算结果。
当输入一维数组时返回一个结果值,若输入的多维数组则同样返回一个多维数组结果。
'''
print("----(1) numpy.dot()----")
# 输入一维数组
arr_A = [1, 2, 3]
arr_B = [4, 5, 6]
print('np.dot(arr_A, arr_B) : ', np.dot(arr_A, arr_B))
'''
np.dot(arr_A, arr_B) : 32
'''
# 输入二维数组时
arr_a = np.array([[50, 100], [24, 12]])
print('arr_a : ', arr_a)
arr_b = np.array([[10, 20], [16, 28]])
print('arr_b : ', arr_b)
arr_dot = np.dot(arr_a, arr_b)
print('arr_dot : ', arr_dot)
'''
arr_a : [[ 50 100]
[ 24 12]]
arr_b : [[10 20]
[16 28]]
arr_dot : [ [2100 3800]
[ 432 816]]
''' '''
(2) numpy.vdot()
该函数用于计算两个向量的点积结果,与 dot() 函数不同。
'''
print("----(1) numpy.dot()----")
# 输入一维数组
arr_a = np.array([[50, 100], [24, 12]])
print('arr_a : ', arr_a)
arr_b = np.array([[10, 20], [16, 28]])
print('arr_b : ', arr_b)
arr_vdot = np.vdot(arr_a, arr_b)
print('arr_vdot : ', arr_vdot)
'''
arr_a : [[ 50 100]
[ 24 12]]
arr_b : [[10 20]
[16 28]]
arr_vdot : 3220
''' '''
(3) numpy.inner()
inner() 方法用于计算数组之间的内积。当计算的数组是一维数组时,它与 dot() 函数相同,
若输入的是多维数组则两者存在不同.
'''
print("----(3) numpy.inner()----")
arr_a = [[1, 10], [100, 1000]]
print('arr_a : ', arr_a)
arr_b = [[1, 2], [3, 4]]
print('arr_b : ', arr_b)
# inner函数
print('np.inner(arr_a, arr_b) : ', np.inner(arr_a, arr_b))
# dot函数
print('np.dot(arr_a, arr_b) : ', np.dot(arr_a, arr_b))
'''
arr_a : [[1, 10], [100, 1000]]
arr_b : [[1, 2], [3, 4]]
inner() 函数的计算过程是 A 数组的每一行与 B 数组的每一行相乘再相加
np.inner(arr_a, arr_b) : [[ 21 43]
[2100 4300]]
dot() 则表示是 A 数组每一行与 B 数组的每一列相乘。
np.dot(arr_a, arr_b) : [[ 31 42]
[3100 4200]]
''' '''
(4) numpy.matmul()
该函数返回两个矩阵的乘积,假如两个矩阵的维度不一致,就会产生错误。
'''
print("----(4) numpy.matmul()----")
arr_a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print('arr_a : ', arr_a)
arr_b = np.array([[23, 23, 12], [2, 1, 2], [7, 8, 9]])
print('arr_b : ', arr_b)
arr_mul = np.matmul(arr_a, arr_b)
print('arr_mul : ', arr_mul)
'''
arr_a : [[1 2 3]
[4 5 6]
[7 8 9]]
arr_b : [[23 23 12]
[ 2 1 2]
[ 7 8 9]]
arr_mul : [ [ 48 49 43]
[144 145 112]
[240 241 181]]
''' '''
(5) numpy.linalg.det()
该函数使用对角线元素来计算矩阵的行列式,计算 2*2(两行两列) 的行列式。
通过对角线元素求行列式的结果(口诀:“一撇一捺”计算法):
1*4-2*3 = -2
'''
print("----(5) numpy.linalg.det()----")
arr_a = np.array([[1, 2], [3, 4]])
print('arr_a : ', arr_a)
print('np.linalg.det(arr_a) : ', np.linalg.det(arr_a))
'''
arr_a : [[1 2]
[3 4]]
np.linalg.det(arr_a) : -2.0000000000000004
''' '''
(6) numpy.linalg.solve()
该函数用于求解线性矩阵方程组,并以矩阵的形式表示线性方程的解,如下所示:
3X + 2 Y + Z = 10
X + Y + Z = 6
X + 2Y - Z = 2
首先将上述方程式转换为矩阵的表达形式:
方程系数矩阵:
3 2 1
1 1 1
1 2 -1
方程变量矩阵:
X
Y
Z
方程结果矩阵:
10
6
2
如果用 m 、x、n 分别代表上述三个矩阵,其表示结果如下:
m*x=n 或 x=n/m
将系数矩阵与结果矩阵传递给 numpy.solve() 函数,即可求出线程方程的解,如下所示:
'''
print("----(6) numpy.linalg.solve()----")
arr_m = np.array([[3, 2, 1], [1, 1, 1], [1, 2, -1]])
print('数组 arr_m : ', arr_m)
arr_n = np.array([[10], [6], [2]])
print ('矩阵 arr_n:', arr_n)
print ('计算:arr_m^(-1)arr_n:')
arr_x = np.linalg.solve(arr_m, arr_n)
print('解 arr_x : ', arr_x)
'''
数组 arr_m :[[ 3 2 1]
[ 1 1 1]
[ 1 2 -1]]
矩阵 arr_n: [[10]
[ 6]
[ 2]]
计算:arr_m^(-1)arr_n:
解 arr_x : [[1.]
[2.]
[3.]]
''' '''
(7) numpy.linalg.inv()
该函数用于计算矩阵的逆矩阵,逆矩阵与原矩阵相乘得到单位矩阵。
'''
print("----((7) numpy.linalg.inv()----")
arr_a = np.array([[1,2],[3,4]])
print('原数组 arr_a : ', arr_a)
arr_b = np.linalg.inv(arr_a)
print("求逆 arr_b :", arr_b)
'''
原数组 arr_a : [[1 2]
[3 4]]
求逆 arr_b : [[-2. 1. ]
[ 1.5 -0.5]]
'''
NumPy学习11的更多相关文章
- 数据分析之Pandas和Numpy学习笔记(持续更新)<1>
pandas and numpy notebook 最近工作交接,整理电脑资料时看到了之前的基于Jupyter学习数据分析相关模块学习笔记.想着拿出来分享一下,可是Jupyter导出来h ...
- NumPy学习(索引和切片,合并,分割,copy与deep copy)
NumPy学习(索引和切片,合并,分割,copy与deep copy) 目录 索引和切片 合并 分割 copy与deep copy 索引和切片 通过索引和切片可以访问以及修改数组元素的值 一维数组 程 ...
- NumPy学习(让数据处理变简单)
NumPy学习(一) NumPy数组创建 NumPy数组属性 NumPy数学算术与算数运算 NumPy数组创建 NumPy 中定义的最重要的对象是称为 ndarray 的 N 维数组类型. 它描述相同 ...
- numpy 学习笔记
numpy 学习笔记 导入 numpy 包 import numpy as np 声明 ndarray 的几种方法 方法一,从list中创建 l = [[1,2,3], [4,5,6], [7,8,9 ...
- numpy 学习总结
numpy 学习总结 作者:csj更新时间:01.09 email:59888745@qq.com 说明:因内容较多,会不断更新 xxx学习总结: 回主目录:2017 年学习记录和总结 #生成数组/使 ...
- (转)Python数据分析之numpy学习
原文:https://www.cnblogs.com/nxld/p/6058572.html https://morvanzhou.github.io/tutorials/data-manipulat ...
- Numpy学习1
NumPy学习(1) 参考资料: http://www.cnblogs.com/zhanghaohong/p/4854858.html http://linusp.github.io/2016/02/ ...
- Numpy学习笔记(下篇)
目录 Numpy学习笔记(下篇) 一.Numpy数组的合并与分割操作 1.合并操作 2.分割操作 二.Numpy中的矩阵运算 1.Universal Function 2.矩阵运算 3.向量和矩阵运算 ...
- Numpy学习笔记(上篇)
目录 Numpy学习笔记(上篇) 一.Jupyter Notebook的基本使用 二.Jpuyter Notebook的魔法命令 1.%run 2.%timeit & %%timeit 3.% ...
- 【大数据技术能力提升_2】numpy学习
numpy学习 标签(空格分隔): numpy python 数据类型 5种类型:布尔值(bool),整数(int),无符号整数(uint).浮点(float).复数(complex) 支持的原始类型 ...
随机推荐
- 关于QtCreator中三种不同编译版本 debug、release、profile 的区别
debug调试模式,编译后的可执行文件很大,带了很多调试符号信息等,方便开发阶段调试的时候进入具体的堆栈查看值.会打开所有的断言,运行阶段性能差速度慢,可能会有卡顿感觉. release发布模式,编译 ...
- [转]Error: Node Sass does not yet support your current environment: Windows 64-bit
错误日志:Error: Node Sass does not yet support your current environment: Windows 64-bit with Unsupported ...
- MySql中的driverClassName、url
在Java桌面开发或者Java Web开发(基于SSM框架)配置MySQL数据源时,driverClassName属性如果填错了,会导致了这一系列错误.归结其原因就是 mysql-connector- ...
- eclipse中汉字横着的问题解决
最近在eclipse中加上中午注释,出现那种汉字是横着的情况,解决方案如下: 方法一: 同一种字体有两种显示方式,比如Fixedsys Excelsior 3.01和@Fixedsys Excelsi ...
- 开源即时通讯IM框架 MobileIMSDK v6.5 发布
一.更新内容简介 本次更新为次要版本更新,进行了bug修复和优化升级(更新历史详见:码云 Release Notes.Github Release Notes). MobileIMSDK 可能是市面上 ...
- 今天记录一下管理系统中预览pdf的方法
在管理系统中,有很多需要预览文件的操作,既方便用户查看又可以不用打开新的页面,我发现一个不错的方法,记录一下 <el-dialog title="" :visible.syn ...
- 项目PMP之二项目运行环境
一.项目运行环境因素 项目内部:组织过程资产(OPA):用于治理和执行项目,可为正式与非正式 过程.政策和程序:由非项目内职能部门制定的,如PMO 组织知识库:项目进行中累计的信息文档,如经验.设计. ...
- tmux中的vim无法多彩高亮显示关键字
1. 问题描述 vim安装了interastingwords插件,在mobaxterm中的session可以正常显示多彩关键字,但是使用tmux登录session,只能显示两个颜色 2. 解决办法 这 ...
- 头文件中 ifndef/define/endif 有什么用?
1. 相同的声明可以多次出现,重复声明不是错误! 定义不可以,无论是单个文件还是多个文件,某个特定作用域(比如全局变量),不可以重复定义变量. 2. 类/结构体的定义可以在多个文件中多次出现,但是不可 ...
- JDK8之前日期时间API
/*java.util.Date类---java.sql.Date类1.两个构造器的使用 >构造器一:Date():创建一个对应当前时间的Date对象 >构造器二:创建指定毫秒数的Date ...