Python 官方文档:入门教程 => 点击学习
这篇文章主要介绍了python数学建模源码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python数学建模源码分析文章都会有所收获,下面我们一起来看看吧。SciPy 学习'''Sc
这篇文章主要介绍了python数学建模源码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python数学建模源码分析文章都会有所收获,下面我们一起来看看吧。
'''SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。'''# 安装scipy库:# SciPy终端安装命令:pip install SciPy# https://www.runoob.com/w3cnote/python-pip-install-usage.html Python pip 安装与使用# 查看scipy版本:import scipyprint(scipy.__version__)# SciPy模块功能表'''模块 功能scipy.cluster 聚类分析等scipy.constants 物理和数学函数scipy.fftpack 傅里叶变换scipy.integrate 积分scipy.interpolate 插值scipy.io 数据输入和输出scipy.linalg 线性代数scipy.ndimage n维图像scipy.odr 正交距离回归scipy.optimize 优化scipy.signal 信号处理scipy.sparse 稀疏矩阵scipy.spatial 空间数据结构和算法scipy.special 特殊函数scipy.stats 统计'''# 使用 dir() 函数来查看 constants 模块包含的常量:from scipy import constantsprint(dir(constants))'''单位类型常量模块包含以下几种单位:公制单位二进制,以字节为单位质量单位角度换算时间单位长度单位压强单位体积单位速度单位温度单位能量单位功率单位力学单位'''print()# SciPy 常量模块:# constants 是 scipy 的常量模块from scipy import constants# 查看一英亩等于多少平方米:print(constants.acre) # 输出 4046.8564223999992# SciPy 常量模块 constants 提供了许多内置的数学常数# 圆周率: pi# 黄金比例: Goldenfrom scipy import constantsprint(constants.pi) # 输出 3.141592653589793 【圆周率】print(constants.golden) # 输出 1.618033988749895 【黄金比例】
1-1
解题代码如下:
# scipy.optimize模块的fsolve和root可求非线性方程(组)的解# 格式:from scipy.optimize import fsolvefrom scipy.optimize import root# fsolve或root求解非线性方程组时,先把非线性方程组写成 F(x)=0 这样的形式【x:向量;F(x):向量函数】fx = lambda x: x**980-5.01*x**979-3.388*x**977\ +7.398*x**978-x**3+5.01*x**2-7.398*x+3.388x1 = fsolve(fx, 1.5, maxfev=420) # 函数调用420次【调用小了,会报警告】x2 = root(fx, 1.5)print(x1) # 相当于答案print()print(x2) # 相当于解题过程
运行x1、x2结果如下:
1-2
解题代码如下:
from scipy.optimize import fsolve, rootfs2 = lambda s: [s[0]**2+s[1]**2-1, s[0]-s[1]]s1 = fsolve(fs2, [1, 1])print()s2 = root(fs2, [1, 1])print(s1)# 输出 [0.70710678 0.70710678]print()print(s2)
运行s2效果如下:
scipy.integrate模块提供了多种积分模式。
积分主要分为以下两类:
对给定函数的数值积分
对给定离散点的数值积分,函数有trapz
题目:
'''函数 说明quad(func, a, b, args) 计算一重数值积分dblquad(func, a, b, gfun, hfun, args) 计算二重数值积分tplquad(func, a, b, gfun, hfun, qfun, rfun) 计算三重数值积分nquad(func, ranges, args) 计算多变量积分'''from scipy.integrate import quaddef func(x, a, b): return a*x**2+b*xz1 = quad(func, 0, 1, args=(2, 1))z2 = quad(func, 0, 1, args=(2, 10))print(z1) # 输出 (1.1666666666666665, 1.2952601953960159e-14)print(z2) # 输出 (5.666666666666667, 6.291263806209221e-14)# 注:输出的后一个值为积分值的绝对误差
# 最小二乘解# scipy.optimize 模块求非线性方程组最小二乘解格式:'''from scipy.optimize import least_squaresleast_squares(fun, x0)注:用到loadtxt需自行准备好文件【准备文件】'''from scipy.optimize import least_squaresimport numpy as nps = np.loadtxt('data.txt')x0 = s[0]y0 = s[1]d = s[2]fs = lambda x: np.sqrt((x0-s[0])**2+(y0-s[1])**2-d)xc = least_squares(fs, np.random.rand(2))print(xc)print()print(xc.s)
题目:
# 4-最大模特征值及对应的特征向量# 题目描述:求下列矩阵的最大模特征值及对应的特征向量:from scipy.sparse.linalg import eigsimport numpy as npm = np.array([ [1, 2, 3], [2, 1, 3], [3, 3, 6]], dtype=float)a, b = np.linalg.eig(m)c, d = eigs(m, 1)print('最大模特征值为:', c) # 输出 最大模特征值为: [9.+0.j]print('对应的特征向量:\n', d)
运行结果如下:
# NumPy 广播(Broadcast)# 广播是 numpy 对不同形状的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。# 如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。# 这要求维数相同,且各维度的长度相同。'''对两个数组,分别比较他们的每一个维度(若其中一个数组没有当前维度则忽略),满足:数组拥有相同形状。当前维度的值相等。当前维度的值有一个是 1。若条件不满足,抛出 "ValueError: frames are not aligned" 异常'''import numpy as npa = np.array([3, 6, 9])b = np.array([2, 4, 6])c = a * bprint(c) # 输出 [ 6 24 54]# 若形状不同时,numpy 将自动触发广播机制import numpy as npx = np.array([ [4, 2, 5], [5, 2, 0], [2, 6, 1], [1, 4, 5]])y = np.array([3, 1, 2])print(x+y)yy = np.tile(y, (4, 1)) # 重复b的各个维度print(x+yy)
# NumPy 数学函数# NumPy 包含大量的各种数学运算的函数,包括三角函数,算术运算的函数,复数处理函数等。# 1-三角函数# NumPy 提供了标准的三角函数:sin()、cos()、tan()。import numpy as nplxw = np.array([0, 30, 45, 60, 90])# sin()zx = np.sin(lxw*np.pi/180)print(zx)# 计算角度的反正弦【单位:弧度】fzx = np.arcsin(zx)print(fzx)# 检查结果【通过转化为角度制】jg = np.degrees(fzx)print(jg) # 输出 [ 0. 30. 45. 60. 90.]# cos()yx = np.cos(lxw*np.pi/180)print(yx)# 反余弦fyx = np.arccos(yx)print(fyx)# 检查结果:jg2 = np.degrees(fyx)print(jg2) # 输出 [ 0. 30. 45. 60. 90.]# tan()zq = np.tan(lxw*np.pi/180)print(zq)# 反正切fzq = np.arctan(zq)print(fzq)# 检查结果:jg3 = np.degrees(fzq)print(jg3) # 输出 [ 0. 30. 45. 60. 90.]
# 2-舍入函数# 2-1 numpy.around()'''numpy.around() 函数返回指定数字的四舍五入值。格式:numpy.around(a,decimals)参数说明:a: 数组decimals: 舍入的小数位数。 默认值为0。 如果为负,整数将四舍五入到小数点左侧的位置'''import numpy as npbl = np.array([15.222, 22.6555, 13.71111])print(np.around(bl)) # 输出 [15. 23. 14.]print(np.around(bl, 2)) # 输出 [15.22 22.66 13.71]print(np.around(bl, -1)) # 输出 [20. 20. 10.]
# 2-2 numpy.floor()# numpy.floor() 返回小于或者等于指定表达式的最大整数,即向下取整import numpy as npxx = np.array([23.3, 13.43, 2.9])print(np.floor(xx)) # 输出 [23. 13. 2.]
# 2-3 numpy.ceil()# numpy.ceil() 返回大于或者等于指定表达式的最小整数,即向上取整import numpy as npxs = np.array([23.1, 23.5, 54.9])print(np.ceil(xs)) # 输出 [24. 24. 55.]
NumPy 算术函数包含简单的加减乘除: add(),subtract(),multiply() 和 divide()
倒数:reciprocal()
幂:power()
余数:mod() | remainder()
注
:数组必须具有相同的形状或
符合数组广播规则
相关代码如下:
import numpy as npsz = np.arange(9, dtype=np.float_).reshape(3, 3)sz2 = np.array([5, 2, 1]) # 注:如果相除,这里是被除数的话,里面不能有0# 数组相加xj = np.add(sz, sz2)print(xj)# 数组相减xj2 = np.subtract(sz, sz2)print(xj2)# 数组相乘xc = np.multiply(sz, sz2)print(xc)# 数组相除xc2 = np.divide(sz, sz2)print(xc2)print()# numpy.power()# numpy.power() 函数将第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂import numpy as npm = np.array([1, 4, 8]) # 数组1mc = np.power(m, 3) # 数组1所有元素对应的3次方print(mc) # 输出 [ 1 64 512]m2 = np.array([1, 2, 3]) # 数组2mc2 = np.power(m, m2) # 数组1作为底数,数组2作为幂print(mc2) # 输出 [ 1 16 512]print()# numpy.mod()# numpy.mod() 计算输入数组中相应元素的相除后的余数# 函数 numpy.remainder() 也产生相同的结果import numpy as npsz1 = np.array([23, 45, 67])sz2 = np.array([2, 3, 5])print(np.mod(sz1, sz2)) # 输出 [1 0 2]print(np.remainder(sz1, sz2)) # 输出 [1 0 2]
# pandas的SettingWithCopyWarning
# pandas的SettingWithCopyWarning报警复现、原因、解决方案# 读取数据import pandas as pddf = pd.read_csv('nba.csv')print(df.head())# 核心解决问题:pandas的dataframe的修改写操作,只允许在源dataframe上进行,一步到位# 解决方法(两种):'''1-将get+set的两步操作,改成set的一步操作2-若须处理筛选数据做后续的处理分析,使用copy复制dataframe'''# pandas不允许先筛选子dataframe,在进行修改写入
【注意先准备好csv文件
】
Series的排序:
# Pandas 数据排序'''Series的排序:Series.sort_values(ascending=True, inplace=False)参数说明: · ascending: 默认为True升序排序,False为False · inplace: 是否修改原始SeriesDataFrame的排序:DataFrame.sort_values(by, ascending=True, inplace=False)参数说明: · by:字符串或者List<字符串>,单列排序或者多列排序 · ascending: bool或者List,升序还是降序 · inplace: 是否修改原始DataFrame'''# Series的排序:import pandas as pddf = pd.read_csv('nba.csv')print(df.head())# 输出前五行print(df['Weight'].sort_values()) # 升序排序print(df['Weight'].sort_values(ascending=False)) # 降序排序
运行结果分别如下:
# DataFrame的排序# 单列排序:print(df.sort_values(by='Weight'))
运行部分结果如下:
print(df.sort_values(by="Weight", ascending=False)) # 降序排序
# 多列排序:print(df.sort_values(by=['Age', 'Weight']))
# 两个字段都是降序排序print(df.sort_values(by=['Age', 'Weight'], ascending=False))
# 分别指定升序还是降序print(df.sort_values(by=['Age', 'Weight'], ascending=[False, True]))
之前我就在这个字符串处理的题上出了一些问题(不过当天就解决啦)【今天在来看看】,也就是
df['lrl'].str.replace("%", "").astype("int32")
# Pandas字符串处理:'''1-使用方法:先获取Series的属性,然后再属性上调用函数2-只能在字符串列上使用,不能再数字列上使用3-DataFrame没有str属性和使用4-Series.str并不是原生Python字符串,它是封装的一套方法'''# 获取Series的属性# print(df['Salary'].str) # 报错【示范】# AttributeError: Can only use .str accessor with string values!# AttributeError:只能使用。带字符串值的str访问器!# 一定得是字符串列print(df['College'].str)# 运行结果为: <pandas.core.strings.accessor.StringMethods object at 0x00000204444EBC48># 判断是不是数字列print(df['College'].str.isnumeric())# print(df['College'].len) # 报错【示范】# AttributeError: 'Series' object has no attribute 'len'# AttributeError:“Series”对象没有属性“len”
# 使用str的startswith、contains等得到bool的Series可以做条件查询tj = df['Height'].str.startswith("6-2")print(tj)
# 去掉Height中间的“-”print(df['Height'].str.replace("-", ""))
# 取第一位数print(df['Height'].str.replace("-", "").str.slice(0, 1))# 同上print(df['Height'].str.replace("-", "").str[0:1])
关于“python数学建模源码分析”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“python数学建模源码分析”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网Python频道。
--结束END--
本文标题: python数学建模源码分析
本文链接: https://lsjlt.com/news/358035.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0