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编写可视化大屏电子看板系统26-模块4模具进度
一.前言 模具进度主要用来展示不同的模具类别加工进度,表格的形式展示,显示内容包括模具编号.版本号.类型.状态.产品名称.计划交期.当前进度,其中进度条采用自定义控件三态进度条,有三种状态显示进度:右 ...
- Qt编写百度地图综合应用(在线+离线+区域)
一.前言 在现在很多的应用系统中,会提供一个地图模块,地图相关的应用和app也是非常多,最广泛的应用就属于导航,地图基本上分在线的和离线的两种,在线的一般都是实时的,数据也是最新的,速度很快路线很准, ...
- 阿里技术分享:闲鱼IM基于Flutter的移动端跨端改造实践
本文由阿里闲鱼技术团队祈晴分享,本次有修订和改动,感谢作者的技术分享. 1.内容概述 本文总结了阿里闲鱼技术团队使用Flutter在对闲鱼IM进行移动端跨端改造过程中的技术实践等,文中对比了传统Nat ...
- Solution -「POI 2013」LAB-Maze
\(\mathscr{Description}\) Link. 构造一个边平行与坐标轴, 顶点是整点, 相邻边互相垂直, 且逆时针遍历顶点时转向 (向左或向右) 符合给定字符串的不自交多边形. ...
- CDS标准视图:功能位置描述 I_FunctionalLocationText
视图名称:功能位置描述 I_FunctionalLocationText 视图类型:基本视图 视图代码: 点击查看代码 @EndUserText.label: 'Functional Location ...
- 深入理解 RESTful Api 架构-copy
深入理解 RESTful Api 架构 周梦康 发表于 2016-01-03 分类于 笔记 61818 次浏览 标签 : REST 一些常见的误解 不要以为 RESTful Api 就是设计得像 ...
- 时间序列数据库TSDB InfluxDB介绍
背景 这两年互联网行业掀着一股新风,总是听着各种高大上的新名词.大数据.人工智能.物联网.机器学习.商业智能.智能预警啊等等. 以前的系统,做数据可视化,信息管理,流程控制.现在业务已经不仅仅满足于这 ...
- 如何快速的开发一个完整的iOS直播app(礼物篇)
搭建礼物列表 使用modal,设置modal样式为custom,就能做到从小往上显示礼物列表,并且能看见前面的直播界面 礼物模型设计 一开始创建3个礼物模型,保存到数组,传入给礼物View展示,本来礼 ...
- RocketMQ原理—1.RocketMQ整体运行原理
大纲 1.RocketMQ整体运行原理的介绍顺序 2.RocketMQ生产者是如何发送消息的 3.Broker是如何持久化接收到的消息到磁盘上 4.基于DLedger技术的Broker主从同步原理 5 ...
- Nessus 扫描Web服务
Nessus 扫描Web服务 1.点击 New Scan,选择 Web Application Tests 2.填写扫描名称和扫描目标 3.点击 Discovery ,选择 Scan Type 为全端 ...