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) 支持的原始类型 ...
随机推荐
- Uniapp 获取当前版本号
plus.runtime.getProperty(plus.runtime.appid, function(wgtinfo) { oldversion = wgtinfo.versionCode // ...
- Python 并发编程实战:优雅地使用 concurrent.futures
在 Python 多线程编程中,concurrent.futures 模块提供了一个高层的接口来异步执行可调用对象.今天,我们将通过一个循序渐进的案例,深入了解如何使用这个强大的工具. 从一个模拟场景 ...
- .Net程序员机会来了,微软官方新推出一个面向Windows开发者本地运行AI模型的开源工具
想要开发AI产品的.Net程序员机会来了,这个项目应该好好研究. 虽然说大模型基本都有提供网络API,但肯定没有直接使用本地模型速度快. 最近微软官方新推出AI Dev Gallery开源项目,可以帮 ...
- C# 开发电子印章制作工具 -- 附下载程序
前言 本人在业余时间,开发了一款电子印章制作软件.印章制作软件看似简单,其实不然. 比如对椭圆形印章而言,要求公司名称中的每一个字间隔相等,要求字的方向与椭圆曲线垂直. 要满足这些条件,需要复杂的计算 ...
- Flutter一些概念(一)
1 简述Flutter是什么以及它的主要优势 Flutter是一种由Google开发的开源移动应用开发框架,可以用于构建高度定制化.美观并且性能卓越的移动应用程序,其主要优势有: 跨平台,一次编码,可 ...
- biancheng-socket编程
http://c.biancheng.net/socket/ 网络编程就是编写程序使两台联网的计算机相互交换数据.这就是全部内容了吗?是的!网络编程要比想象中的简单许多.那么,这两台计算机之间用什么传 ...
- jdk8之stream原理及流创建、排序、转换等处理
目录 一.为什么需要 Stream 二.什么是流 三.流的分类 1.有多种方式生成 Stream Source 2.流的操作类型 四.流的创建 1.数组和集合创建流 2.基本数值型流 3.数值流的构造 ...
- Kotlin:闭包、lambda与匿名内部类
- DeepSeek部署本地知识库
技术背景 在前面的两篇文章中,分别介绍过Ubuntu上关于DeepSeek的部署以及Windows平台关于DeepSeek的部署.其中内容包含了Ollama的下载安装和基本使用.DeepSeek模型文 ...
- Markdown编辑环境搭建
摘要:这篇文章主要介绍我本人搭建Markdown编辑环境的全过程,并记录下在这个过程中所遇到的问题及解决方法. 一.VS Code安装 进入VS Code官网:VS Code官网 然后根据自己的电脑下 ...