Python之Numpy:线性代数/矩阵运算
当你知道工具的用处,理论与工具如何结合的时候,通常会加速咱们对两者的学习效率。
零 numpy
那么,Numpy是什么?
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量维度的数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。 ---- 摘自 · 菜鸟教程
一 要点
- 假定AX=b,求解未知矩阵X 【线性代数中常遇到的运算问题】
- 矩阵转置A^(T)
- 矩阵的逆A^(-1)
- 矩阵行列式的值|A|
- 矩阵的秩 rank(A)
- 矩阵的迹 trace(A)
- 其它
- 单位矩阵
- 0向量/矩阵
- ...
二 示例应用
2.1 求解AX=b中的未知参数矩阵X
import numpy as np
# Hypothsis : A*X = b
A = [[2,1,2],
[3,1,0],
[1,1,-1]];
b = np.transpose([-3,5,-2])# 转置
#[or] b = np.transpose(np.array([-3,5,-2]))# 转置
# 求解未知参数矩阵X
X = np.linalg.solve(A,b) # 方式一:直接使用numpy的solve函数一键求解
#A_inv=np.linalg.inv(A) # 方式二:先求逆运算,再点积求值
#X=np.dot(A_inv,b) # a.dot(b) 与 np.dot(a,b) 效果相同;but np.dot(a,b)与np.dot(b,a)效果肯定是不同的(线性代数/矩阵常识)
print("方程组的解:\n",X);
# [output]
方程组的解:
[ 4.4 -8.2 -1.8]
2.2 利用最小二乘法拟合函数模型
给出一组数据【5对(Xi,Yi)参数】,用最小二乘法,求形如:f(x)=a+b*x^3的经验公式。
- 原方程(模型)
\]
- 其法方程
\]
即
\]
import numpy as np
import matplotlib.pyplot as plt # Python 绘图工具(业界推荐)
# 数据初始化
A = [
[1,pow(-3,3)],
[1,pow(-2,3)],
[1,pow(-1,3)],
[1,pow(2,3)],
[1,pow(4,3)]
];
At = np.transpose(A); # A的转置矩阵
y = np.transpose([14.3,8.3,4.7,8.3,22.7]);
# step1:求解
## 令 (a ,b)^T 为 未知参数X
X = np.dot(np.dot(np.linalg.inv(np.dot(At,A)),At),y)
print(X)
print("a:",X[0])
print("b:",X[1])
# step2:查看拟合效果
x = [-3,-2,-1,2,4];
## 1. 计算拟合数值 fitValue
def fitValue(arg_x):
a = X[0];
b = X[1];
return a + b*pow(arg_x,3);
fitValues = np.zeros([5]); # 创建长为5的【一维】数组;[1,5]:创建第1行为5个元素的【二维】数组
for i in range(0,len(fitValues)):
fitValues[i] = fitValue(x[i]);
print(i,":","x(i):",x[i],"fit Y:",fitValues[i]); # just for test
pass;
## 2. 绘图可视化
yt = np.transpose(y); # y的转置
plt.rcParams['figure.dpi'] = 100 #分辨率
plt.scatter(x, yt, marker = '*',color = 'red', s = 10 ,label = 'Actual Dataset') # 真实数据集
plt.scatter(x, fitValues, marker = 'x',color = 'green', s = 10 ,label = 'Fitting Dataset') #[拟合数据集]
plt.legend(loc = 'best') # 设置 图例所在的位置 使用推荐位置
plt.show()
# [output]
[ 10.67505325 0.13679816]
a: 10.6750532504
b: 0.136798159666
0 : x(i): -3 fit Y: 6.98150293942
1 : x(i): -2 fit Y: 9.58066797308
2 : x(i): -1 fit Y: 10.5382550907
3 : x(i): 2 fit Y: 11.7694385277
4 : x(i): 4 fit Y: 19.430135469
2.3 数组创建/初始化
- numpy.linspace(start, stop[, num=50[, endpoint=True[, retstep=False[, dtype=None]]]]])
- 一维等差数列
- return 在指定范围内的均匀间隔的数字(组成的数组),也即返回一个等差数列
- 参数
- start - 起始点
- stop - 结束点
- num - 元素个数,默认为50,
- endpoint - 是否包含stop数值,默认为True,包含stop值;若为False,则不包含stop值
- retstep - 返回值形式,默认为False,返回等差数列组,若为True,则返回结果(array([
samples,step])), - dtype - 返回结果的数据类型,默认无,若无,则参考输入数据类型。
import numpy as np
a = np.linspace(1,10,5,endpoint= True)
print(a) # [ 1. 3.25 5.5 7.75 10. ]
b = np.linspace(1,10,5,endpoint= False)
print(b) #[1. 2.8 4.6 6.4 8.2]
c = np.linspace(1,10,5,retstep = False)
print(c) # [ 1. 3.25 5.5 7.75 10. ]
d = np.linspace(1,10,5,retstep = True)
print(d) # (array([ 1. , 3.25, 5.5 , 7.75, 10. ]), 2.25)
2.4 线性代数常用运算
print("原矩阵A:\n",A);
print("原矩阵b:\n",b);
print("转置矩阵A^T:\n",np.transpose(A)); # 转置
print("矩阵的行列式值|A|:\n",np.linalg.det(A)); # 方阵的行列式值:|A|
print("矩阵的迹trace(A):\n",np.trace(A));
print("矩阵的秩rank(A):\n",np.linalg.matrix_rank(A));
print("逆矩阵A^(-1):\n",np.linalg.inv(A)); #矩阵的逆运算(条件:矩阵A可逆(行列式值不为0)| 矩阵A为方阵)
print("*"*30); # 分隔线
print("N阶单位矩阵:\n",np.eye(4));
print(np.zeros([5])); # 创建长为5的【一维】数组;[1,5]:创建第1行为5个元素的【二维】数组
# 创建指定的初始化数组
print(np.array([1])) # 生成 第1行含值为1的元素的【一维】数组
print(np.array([[56]])) # 生成 第1行含值为56的元素的【二维】数组
np.full((3,5),3.14) # 创建一个3x5的浮点型数组,数组的值都是3.14
# [output]
原矩阵A:
[[2, 1, 2], [3, 1, 0], [1, 1, -1]]
原矩阵b:
[-3 5 -2]
转置矩阵A^T:
[[ 2 3 1]
[ 1 1 1]
[ 2 0 -1]]
矩阵的行列式值|A|:
5.0
矩阵的迹trace(A):
2
矩阵的秩rank(A):
3
逆矩阵A^(-1):
[[-0.2 0.6 -0.4]
[ 0.6 -0.8 1.2]
[ 0.4 -0.2 -0.2]]
**********************
N阶单位矩阵:
[[ 1. 0. 0. 0.]
[ 0. 1. 0. 0.]
[ 0. 0. 1. 0.]
[ 0. 0. 0. 1.]]
[ 0. 0. 0. 0. 0.]
[1]
[[56]]
三 推荐文献
Python之Numpy:线性代数/矩阵运算的更多相关文章
- [转]numpy线性代数基础 - Python和MATLAB矩阵处理的不同
转自:http://blog.csdn.net/pipisorry/article/details/45563695 http://blog.csdn.net/pipisorry/article/de ...
- python中numpy矩阵运算操作大全(非常全)!
python中numpy矩阵运算操作大全(非常全) //2019.07.10晚python矩阵运算大全1.矩阵的输出形式:对于任何一个矩阵,python输出的模板是:import numpy as n ...
- [python] 安装numpy+scipy+matlotlib+scikit-learn及问题解决
这篇文章主要讲述Python如何安装Numpy.Scipy.Matlotlib.Scikit-learn等库的过程及遇到的问题解决方法.最近安装这个真是一把泪啊,各种不兼容问题和报错,希望文章对你有所 ...
- Python数据分析-Numpy数值计算
Numpy介绍: NumPy是高性能科学计算和数据分析的基础包.它是pandas等其他各种工具的基础. NumPy的主要功能: 1)ndarray,一个多维数组结构,高效且节省空间 2)无需循环对整组 ...
- Python的numpy库下的几个小函数的用法
numpy库是Python进行数据分析和矩阵运算的一个非常重要的库,可以说numpy让Python有了matlab的味道 本文主要介绍几个numpy库下的小函数. 1.mat函数 mat函数可以将目标 ...
- NumPy线性代数
NumPy - 线性代数 NumPy 包包含numpy.linalg模块,提供线性代数所需的所有功能. 此模块中的一些重要功能如下表所述. 序号 函数及描述 1. dot 两个数组的点积 2. vdo ...
- Python之Numpy详细教程
NumPy - 简介 NumPy 是一个 Python 包. 它代表 “Numeric Python”. 它是一个由多维数组对象和用于处理数组的例程集合组成的库. Numeric,即 NumPy 的前 ...
- Python 矩阵(线性代数)
Python 矩阵(线性代数) 这里有一份新手友好的线性代数笔记,是和深度学习花书配套,还被Ian Goodfellow老师翻了牌. 笔记来自巴黎高等师范学院的博士生Hadrien Jean,是针对& ...
- Python中Numpy及Matplotlib使用
Python中Numpy及Matplotlib使用 1. Jupyter Notebooks 作为小白,我现在使用的python编辑器是Jupyter Notebook,非常的好用,推荐!!! 你可以 ...
- python安装numpy和pandas
最近要对一系列数据做同比比较,需要用到numpy和pandas来计算,不过使用python安装numpy和pandas因为linux环境没有外网遇到了很多问题就记下来了.首要条件,python版本必须 ...
随机推荐
- ribbon负载均衡循环策略源码
(原) 在用ribbon负载均衡取eureka注册中心中的地址时,默认采用循环策略,例如商品服务有3个,分别为URL1,URL2,URL3,那么在客户端第一次取时,会取到URL1,第二次取时取到URL ...
- Windows下Redis如何永久更改密码
公司使用的是Spring-session-redis 需要给Redis配置一个密码 本来我配置密码的方法是 先打开Redis服务 在采用 命令 CONFIG SET requirepass " ...
- 页面初次渲染loading图
当第一次进入页面时,可能由于网速或其他原因请求接口需要等待很长时间,这是页面一片空白,很难看,切交互性也不好,这是,我们常常放上一个loading等待图给用户以反馈 // 页面尚未加载时的loadin ...
- C#双缓冲解释
C#双缓冲解释 简单说就是当我们在进行画图操作时,系统并不是直接把内容呈现到屏幕 C#双缓冲 上,而是先在内存中保存,然后一次性把结果输出来,如果没用双缓冲的话,你会发现在画图过程中屏幕会闪的很厉害, ...
- 题解 【NOIP2013】转圈游戏
[NOIP2013]转圈游戏 Description n个小伙伴(编号从0到n-1)围坐一圈玩游戏.按照顺时针方向给n个位置编号,从0到n-1.最初,第0号小伙伴在第0号位置,第1号小伙伴在第1号位置 ...
- Spark配置详解
Spark提供三个位置用来配置系统: Spark属性:控制大部分的应用程序参数,可以用SparkConf对象或者Java系统属性设置 环境变量:可以通过每个节点的 conf/spark-env.sh脚 ...
- codeforces271D
Good Substrings CodeForces - 271D 给你一个只包含小写字母的字符串s.问你在这个字符串中有多少个不同的子串.且要求这些子串中不得出现超过k个的特殊字母.*子串s1和子串 ...
- python配置文件
python有两种配置文件,file.ini和file.json 一.ini文件如下: db_config.ini [baseconf] host=127.0.0.1 port=3306 user=r ...
- TCP输出 之 tcp_write_xmit
概述 tcp_write_xmit函数完成对待发送数据的分段发送,过程中会遍历发送队列,进行窗口检查,需要TSO分段则分段,然后调用tcp_transmit_skb发送数据段: 源码分析 static ...
- koa 项目实战(一)创建项目
1.安装模块 npm install koa koa-router --save npm install -g nodemon 2.入口文件 app.js const Koa = require('k ...