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) 支持的原始类型 ...
随机推荐
- Qt数据库应用10-通用数据库设置
一.前言 做过了众多的项目,只要是用了数据库的项目,基本上还有一个需求就是,提供一个界面用来初始化数据库,相当于恢复出厂设置的数据,一般恢复出厂设置需要复位的是配置文件.数据库文件.布局文件这几种,其 ...
- Ant和Ivy集成部署和使用
Apache Ivy是专门用来管理项目的jar包依赖的.我们知道Maven已经有很出色的这方面的功能,如果你已经在使用Maven,就没必要使用Ivy了.但是其实Maven除了这方面功能,还有很多强大的 ...
- CSP2024 游记
前文 Day -1 上午考试了,多少分忘了. 晚上老师布置模板题. Day 0 继续前一天的模板题,并没有 AK. Day 1 J 组 先看 T1,发现是一道简单的水题,切了. 再看 T2,也是水题, ...
- WPF刮刮乐
WPF刮刮乐 <Window x:Class="WpfApp2.MainWindow" xmlns="http://schemas.microsoft.com/wi ...
- Graph DataBase介绍-图数据库
前言分析社会关系这类复杂图壮结构的海量数据,使用图形数据库(Graph DataBase)是最好的选择.– 作者:李祎 <程序员>介绍各种NoSQL 数据库的文章已经很多,不过大部分都是基 ...
- centos8网络配置问题
由于RHEL8与centos8基本一样,所以以下方法同样适用于RHEL8 在centos8上进行网络配置时,出现以下问题: 意思是无法找到network.service 出现错误的原因是centos8 ...
- linux:redis
查询: 链接 redis初了解 是一个 "开源.免费" 的高性能的 key - value 的数据库 安装 yum添加epel源 yum install epel-release ...
- 图解红黑树RBT
rotation:
- 五. Redis 配置内容(详细配置说明)
五. Redis 配置内容(详细配置说明) @ 目录 五. Redis 配置内容(详细配置说明) 1. Units 单位配置 2. INCLUDES (包含)配置 3. NETWORK (网络)配置 ...
- 从生活案例理解滑动窗口最大值:一个超直观的思路讲解|LeetCode 239 滑动窗口最大值
LeetCode 239 滑动窗口最大值 点此看全部题解 LeetCode必刷100题:一份来自面试官的算法地图(题解持续更新中) 更多干货,请关注公众号[忍者算法],回复[刷题清单]获取完整题解目录 ...