中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python數學建模實例分析

發布時間:2022-07-04 09:26:30 來源:億速云 閱讀:259 作者:iii 欄目:開發技術

這篇文章主要介紹“python數學建模實例分析”,在日常操作中,相信很多人在python數學建模實例分析問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”python數學建模實例分析”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

SciPy 學習

'''
SciPy 包含的模塊有最優化、線性代數、積分、插值、特殊函數、快速傅里葉變換、
信號處理和圖像處理、常微分方程求解和其他科學與工程中常用的計算。
'''
# 安裝scipy庫:
# SciPy終端安裝命令:pip install SciPy
# https://www.runoob.com/w3cnote/python-pip-install-usage.html  Python pip 安裝與使用
# 查看scipy版本:
import scipy
print(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 constants
print(dir(constants))
'''
單位類型
常量模塊包含以下幾種單位:
公制單位
二進制,以字節為單位
質量單位
角度換算
時間單位
長度單位
壓強單位
體積單位
速度單位
溫度單位
能量單位
功率單位
力學單位
'''
print()
# SciPy 常量模塊:
# constants 是 scipy 的常量模塊
from scipy import constants
# 查看一英畝等于多少平方米:
print(constants.acre)   # 輸出 4046.8564223999992
# SciPy 常量模塊 constants 提供了許多內置的數學常數
# 圓周率:  pi
# 黃金比例: golden
from scipy import constants
print(constants.pi)         # 輸出 3.141592653589793 【圓周率】
print(constants.golden)     # 輸出 1.618033988749895 【黃金比例】

SciPy基本操作

1-求解非線性方程(組)

1-1

python數學建模實例分析

解題代碼如下:

# scipy.optimize模塊的fsolve和root可求非線性方程(組)的解
# 格式:
from scipy.optimize import fsolve
from 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.388
x1 = fsolve(fx, 1.5, maxfev=420)     # 函數調用420次【調用小了,會報警告】
x2 = root(fx, 1.5)
print(x1)   # 相當于答案
print()
print(x2)   # 相當于解題過程

運行x1、x2結果如下:

python數學建模實例分析

1-2

python數學建模實例分析

解題代碼如下:

from scipy.optimize import fsolve, root
fs2 = 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效果如下:

python數學建模實例分析

2-積分

scipy.integrate模塊提供了多種積分模式。

積分主要分為以下兩類:

  • 對給定函數的數值積分

  • 對給定離散點的數值積分,函數有trapz

題目:

python數學建模實例分析

'''
函數                                              說明
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 quad

def func(x, a, b):
    return a*x**2+b*x
z1 = 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)
# 注:輸出的后一個值為積分值的絕對誤差
3-最小二乘解

python數學建模實例分析

# 最小二乘解
# scipy.optimize 模塊求非線性方程組最小二乘解格式:
'''
from scipy.optimize import least_squares
least_squares(fun, x0)
注:用到loadtxt需自行準備好文件【準備文件】
'''
from scipy.optimize import least_squares
import numpy as np
s = 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-最大模特征值及對應的特征向量

題目:

python數學建模實例分析

# 4-最大模特征值及對應的特征向量
# 題目描述:求下列矩陣的最大模特征值及對應的特征向量:
from scipy.sparse.linalg import eigs
import numpy as np
m = 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)

運行結果如下:

python數學建模實例分析

Numpy學習(續)

# NumPy 廣播(Broadcast)
# 廣播是 numpy 對不同形狀的數組進行數值計算的方式, 對數組的算術運算通常在相應的元素上進行。

# 如果兩個數組 a 和 b 形狀相同,即滿足 a.shape == b.shape,那么 a*b 的結果就是 a 與 b 數組對應位相乘。
# 這要求維數相同,且各維度的長度相同。
'''
對兩個數組,分別比較他們的每一個維度(若其中一個數組沒有當前維度則忽略),滿足:
數組擁有相同形狀。
當前維度的值相等。
當前維度的值有一個是 1。
若條件不滿足,拋出 "ValueError: frames are not aligned" 異常

'''
import numpy as np
a = np.array([3, 6, 9])
b = np.array([2, 4, 6])
c = a * b
print(c)    # 輸出 [ 6 24 54]
# 若形狀不同時,numpy 將自動觸發廣播機制
import numpy as np
x = 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)

1 Numpy 數學函數

1-1三角函數
# NumPy 數學函數
# NumPy 包含大量的各種數學運算的函數,包括三角函數,算術運算的函數,復數處理函數等。

# 1-三角函數
# NumPy 提供了標準的三角函數:sin()、cos()、tan()。
import numpy as np

lxw = 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()
# 2-舍入函數
# 2-1 numpy.around()
'''
numpy.around() 函數返回指定數字的四舍五入值。
格式:
numpy.around(a,decimals)
參數說明:
a: 數組
decimals: 舍入的小數位數。 默認值為0。 如果為負,整數將四舍五入到小數點左側的位置

'''
import numpy as np
bl = 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()
# 2-2 numpy.floor()
# numpy.floor() 返回小于或者等于指定表達式的最大整數,即向下取整
import numpy as np
xx = np.array([23.3, 13.43, 2.9])
print(np.floor(xx))     # 輸出 [23. 13.  2.]
2-3 numpy.ceil()
# 2-3 numpy.ceil()
# numpy.ceil() 返回大于或者等于指定表達式的最小整數,即向上取整
import numpy as np
xs = np.array([23.1, 23.5, 54.9])
print(np.ceil(xs))      # 輸出 [24. 24. 55.]

3 Numpy算術函數

NumPy 算術函數包含簡單的加減乘除: add(),subtract(),multiply() 和 divide()

  • 倒數:reciprocal()

  • 冪:power()

  • 余數:mod() | remainder()

:數組必須具有相同的形狀符合數組廣播規則

相關代碼如下:

import numpy as np
sz = 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 np
m = np.array([1, 4, 8])     # 數組1
mc = np.power(m, 3)         # 數組1所有元素對應的3次方
print(mc)   # 輸出 [  1  64 512]
m2 = np.array([1, 2, 3])    # 數組2
mc2 = np.power(m, m2)       # 數組1作為底數,數組2作為冪
print(mc2)  # 輸出 [  1  16 512]
print()
# numpy.mod()
# numpy.mod() 計算輸入數組中相應元素的相除后的余數
# 函數 numpy.remainder() 也產生相同的結果
import numpy as np
sz1 = 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學習(續)

# pandas的SettingWithCopyWarning

# pandas的SettingWithCopyWarning報警復現、原因、解決方案
# 讀取數據
import pandas as pd
df = pd.read_csv('nba.csv')
print(df.head())
# 核心解決問題:pandas的dataframe的修改寫操作,只允許在源dataframe上進行,一步到位
# 解決方法(兩種):
'''
1-將get+set的兩步操作,改成set的一步操作
2-若須處理篩選數據做后續的處理分析,使用copy復制dataframe

'''
# pandas不允許先篩選子dataframe,在進行修改寫入

注意先準備好csv文件

Pandas 數據排序

Series的排序:

# Pandas 數據排序
'''
Series的排序:
Series.sort_values(ascending=True, inplace=False)
參數說明:
    · ascending: 默認為True升序排序,False為False
    · inplace:   是否修改原始Series

DataFrame的排序:
DataFrame.sort_values(by, ascending=True, inplace=False)
參數說明:
    · by:字符串或者List<字符串>,單列排序或者多列排序
    · ascending: bool或者List,升序還是降序
    · inplace:   是否修改原始DataFrame

'''
# Series的排序:
import pandas as pd
df = pd.read_csv('nba.csv')
print(df.head())		# 輸出前五行
print(df['Weight'].sort_values())                      # 升序排序
print(df['Weight'].sort_values(ascending=False))       # 降序排序

運行結果分別如下:

python數學建模實例分析

python數學建模實例分析

python數學建模實例分析

DataFrame的排序

# DataFrame的排序
# 單列排序:
print(df.sort_values(by='Weight'))

運行部分結果如下:

python數學建模實例分析

print(df.sort_values(by="Weight", ascending=False))     # 降序排序

python數學建模實例分析

# 多列排序:
print(df.sort_values(by=['Age', 'Weight']))

python數學建模實例分析

# 兩個字段都是降序排序
print(df.sort_values(by=['Age', 'Weight'], ascending=False))

python數學建模實例分析

# 分別指定升序還是降序
print(df.sort_values(by=['Age', 'Weight'], ascending=[False, True]))

python數學建模實例分析

Pandas字符串處理

之前我就在這個字符串處理的題上出了一些問題(不過當天就解決啦)【今天在來看看】,也就是

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”

python數學建模實例分析

# 使用str的startswith、contains等得到bool的Series可以做條件查詢
tj = df['Height'].str.startswith("6-2")
print(tj)

python數學建模實例分析

# 去掉Height中間的“-”
print(df['Height'].str.replace("-", ""))

python數學建模實例分析

# 取第一位數
print(df['Height'].str.replace("-", "").str.slice(0, 1))

# 同上
print(df['Height'].str.replace("-", "").str[0:1])

python數學建模實例分析

到此,關于“python數學建模實例分析”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

噶尔县| 柘城县| 宿迁市| 梁河县| 宜川县| 罗江县| 淮滨县| 调兵山市| 山阴县| 华阴市| 灵璧县| 江城| 新干县| 伊宁市| 襄汾县| 乐至县| 玉树县| 马边| 梅河口市| 固始县| 日照市| 寿光市| 木兰县| 兴和县| 河曲县| 和田县| 荔浦县| 义乌市| 伊金霍洛旗| 河北区| 赫章县| 安阳县| 育儿| 潢川县| 精河县| 河池市| 尤溪县| 吴忠市| 潜江市| 贵德县| 克山县|