当前位置:首页 >> 编程语言 >> 【python数据建模】Numpy库,恶棍城市

【python数据建模】Numpy库,恶棍城市

0evadmin 编程语言 1
文件名:【python数据建模】Numpy库,恶棍城市 【python数据建模】Numpy库 数组 创建 import numpy as np# np.array() 生成元素同类型的数组a1=np.array([1,2,3,4]) # 整型a2=np.array([1.0,2,3,4]) # 浮点型a3=np.array([1,2,3,4],dtype=float)a4=np.array(['1',2,3,4]) # 字符串# np.astype() 数值类型转换a=a4.astype(int)print(a.dtype)# np.arange(start,stop,step,dtype) # 生成[start,stop)区间上步长为step,类型为dtype的等差数组b1=np.arange(1,4)b2=np.arange(0,10,2)# np.linspace(start,stop,num=50,endpoint=True)# 生成区间[start,stop]区间上间隔相等的num个数据的等差数组,默认包含区间终点c1=np.linspace(0,100)c2=np.linspace(0,10,num=3,endpoint=False)# np.logspace(start,stop,num=50,endpoint=True,base=10.0)# 默认生成区间[10^start,10^stop]上的num个数据的等比数列d1=np.logspace(0,1)d2=np.logspace(0,8,num=3,base=2,dtype=int) 创建特定数组 import numpy as np# np.ones(shape,dtype=None,order='C') 生成元素全为1的矩阵# order:C 行优先,F:列优先a1=np.ones((2,3),dtype=int)a2=np.ones((3,4),dtype=[('x','int'),('y','float')])# np.zeros(shape,dtype=float,order='C') 生成元素全为0的矩阵b=np.zeros((3,2),dtype=int)# np.empty(shape,dtype=float,order='C') 生成给定维度、数值类型以及存储顺序的未初始化(任意值)的数组。c=np.empty((2,3))# np.eye(N, M=None, k=0, dtype=<class 'float'>) 2维数组,单位矩阵# 不输入参数M的时候默认等于N# k:对角线索引,0为主对角线,正值为对角线上移,负值为对角线下移d1=np.eye(3)d2=np.eye(2,3)d3=np.eye(3,k=2)# np.zeros_like(a,dtype=None) 生成一个与给定数组a同规模和类型的零数组c1=np.zeros_like(d1)c2=np.zeros_like(d1,dtype=int) 索引

除了类似二维列表的索引a[i][j],还可以用a[i,j]的形式索引,同样可以类似列表使用切片等操作。Numpy数组的索引还可以和整数数组结合使用,以及进行布尔值索引。

1 整数数组索引 import numpy as npa=np.arange(0,16).reshape(4,4)"""[[ 0 1 2 3][ 4 5 6 7][ 8 9 10 11][12 13 14 15]]"""ind=[0,1,2]print(a[ind]) # 索引前3行"""[[ 0 1 2 3][ 4 5 6 7][ 8 9 10 11]]"""print(a[ind,ind]) # 索引前3行主对角线元素"""[ 0 5 10]""" 2 布尔值索引

可以给出筛选条件,然后通过索引

import numpy as np# 布尔值索引a=np.arange(0,16).reshape(4,4)b=a<=5"""[[ True True True True][ True True False False][False False False False][False False False False]]"""print(a[b])"""[0 1 2 3 4 5]""" 合并与分解 函数说明hstack按水平顺序重新堆叠排序两个数组vstack按垂直顺序重新堆叠排序两个数组 线性代数运算 linalg模块 基本运算 函数说明kronK积matmul矩阵乘法dot向量作内积,矩阵作乘法inner数组作内积,返回nd数组类型 分解 函数说明qr矩阵的QR分解svd奇异值分解choleskyCholesky分解,常出现在最小二乘法

线代上一些常见的矩阵分解可以见本人自己写的一篇公众号推文:常见的几种矩阵分解 以下只做简单描述和范例展示。

QR分解

通常是把可逆矩阵分解为正交矩阵和对角线元素都为正数的上三角矩阵的乘积。 是对线性无关向量组进行施密特正交单位化的矩阵表达。

import numpy as npimport numpy.linalg as nla = np.array([[1,1,0,0],[1,0,1,0],[-1,0,0,1],[1,-1,-1,1]])Q,R= nl.qr(a)print(np.matmul(Q,R)) # 验证 奇异值分解

对于可逆矩阵A,存在正交矩阵 Q 1 , Q 2 Q_1,Q_2 Q1,Q2使得 Q 1 A Q 2 Q_1AQ_2 Q1AQ2为对角矩阵,主对角元为 λ i \lambda_i λi满足 λ i 2 \lambda_i^2 λi2 A A T AA^T AAT的全部特征根。 对于不可逆以及非方阵同样如此,但是“对角线”上可能会有0元。

import numpy as npimport numpy.linalg as nla = np.array([[1,1,1],[-1,0,1],[0,-1,1]])U,S,vh= nl.svd(a) Cholesky分解

是针对正定矩阵的分解,即正定矩阵可以分解为下三角矩阵与其转置矩阵的乘积。

import numpy as npimport numpy.linalg as nla = np.array([[4, 12, -16],[12, 37, -43],[-16, -43, 98]])L = nl.cholesky(a)print(L)"""[[ 2. 0. 0.][ 6. 1. 0.][-8. 5. 3.]]""" 特征值 函数说明eig计算方阵的特征值和右特征向量eigh返回埃尔米特矩阵或实对称矩阵的特征值和特征向量eigvalsh计算复杂的埃尔米特矩阵或实对称矩阵的特征值 import numpy as npimport numpy.linalg as nl# eigeigenvalues, eigenvectors = nl.eig(np.diag((1, 2, 3))) 范数和其他 函数说明norm矩阵或向量范数det矩阵行列式matrix_rank使用svd方法返回矩阵的秩trace数组对角线的和/矩阵的迹 解方程和逆矩阵

广义逆的定义和性质可以参考《高等代数》(丘维声)相关章节

函数说明solve求解线性方程组,只能求有唯一解的方程组lstsq返回线性方程的最小二乘解inv矩阵求逆pinv矩阵求广义逆 import numpy as npimport numpy.linalg as nl# solvea = np.array([[1,2,1],[0,1,0],[0,0,1]])b = np.array([1,0,0])x=nl.solve(a,b)# inva=np.array([[1,2,1],[0,1,0],[0,0,1]])b=nl.inv(a)# pinva=np.array([[1,2,1],[0,1,0]])b=nl.pinv(a)
协助本站SEO优化一下,谢谢!
关键词不能为空
同类推荐
«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接