最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python數(shù)學(xué)建模(SciPy+?Numpy+Pandas)

 更新時間:2022年07月03日 15:47:15   作者:lxw-pro  
這篇文章主要介紹了python數(shù)學(xué)建模(SciPy+?Numpy+Pandas),文章基于python的相關(guān)資料緊接上一篇文章內(nèi)容展開主題詳情,需要的小伙伴可以參考一下

前言

SciPy 是一個開源的 Python 算法庫和數(shù)學(xué)工具包, Scipy 是基于 Numpy 的科學(xué)計算庫,用于數(shù)學(xué)、科學(xué)、工程學(xué)等領(lǐng)域。
SciPy庫依賴于NumPy,它提供了便捷且快速的N維數(shù)組操作。
SciPy庫的構(gòu)建與NumPy數(shù)組一起工作,并提供了許多用戶友好和高效的數(shù)字實踐,
并在天文學(xué)、生物學(xué)、氣象學(xué)和氣候科學(xué),以及材料科學(xué)等多個學(xué)科得到了廣泛應(yīng)用。
NumPy和SciPy易于使用,強大到足以依靠世界上一些頂尖的科學(xué)家和工程師。

SciPy 學(xué)習(xí)

'''
SciPy 包含的模塊有最優(yōu)化、線性代數(shù)、積分、插值、特殊函數(shù)、快速傅里葉變換、
信號處理和圖像處理、常微分方程求解和其他科學(xué)與工程中常用的計算。
'''
# 安裝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 物理和數(shù)學(xué)函數(shù)
scipy.fftpack   傅里葉變換
scipy.integrate 積分
scipy.interpolate   插值
scipy.io        數(shù)據(jù)輸入和輸出
scipy.linalg    線性代數(shù)
scipy.ndimage   n維圖像
scipy.odr       正交距離回歸
scipy.optimize  優(yōu)化
scipy.signal    信號處理
scipy.sparse    稀疏矩陣
scipy.spatial   空間數(shù)據(jù)結(jié)構(gòu)和算法
scipy.special   特殊函數(shù)
scipy.stats     統(tǒng)計
'''
# 使用 dir() 函數(shù)來查看 constants 模塊包含的常量:
from scipy import constants
print(dir(constants))
'''
單位類型
常量模塊包含以下幾種單位:
公制單位
二進制,以字節(jié)為單位
質(zhì)量單位
角度換算
時間單位
長度單位
壓強單位
體積單位
速度單位
溫度單位
能量單位
功率單位
力學(xué)單位
'''
print()
# SciPy 常量模塊:
# constants 是 scipy 的常量模塊
from scipy import constants
# 查看一英畝等于多少平方米:
print(constants.acre)   # 輸出 4046.8564223999992
# SciPy 常量模塊 constants 提供了許多內(nèi)置的數(shù)學(xué)常數(shù)
# 圓周率:  pi
# 黃金比例: golden
from scipy import constants
print(constants.pi)         # 輸出 3.141592653589793 【圓周率】
print(constants.golden)     # 輸出 1.618033988749895 【黃金比例】

1-SciPy基本操作

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

1-1

解題代碼如下:

# scipy.optimize模塊的fsolve和root可求非線性方程(組)的解
# 格式:
from scipy.optimize import fsolve
from scipy.optimize import root
# fsolve或root求解非線性方程組時,先把非線性方程組寫成 F(x)=0 這樣的形式【x:向量;F(x):向量函數(shù)】
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)     # 函數(shù)調(diào)用420次【調(diào)用小了,會報警告】
x2 = root(fx, 1.5)
print(x1)   # 相當(dāng)于答案
print()
print(x2)   # 相當(dāng)于解題過程

運行x1、x2結(jié)果如下:

1-2

解題代碼如下:

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效果如下:

1-2積分

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

積分主要分為以下兩類:

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

題目:

'''
函數(shù)                                              說明
quad(func, a, b, args)                      計算一重數(shù)值積分
dblquad(func, a, b, gfun, hfun, args)       計算二重數(shù)值積分
tplquad(func, a, b, gfun, hfun, qfun, rfun) 計算三重數(shù)值積分
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)
# 注:輸出的后一個值為積分值的絕對誤差

1-3最小二乘解

# 最小二乘解
# scipy.optimize 模塊求非線性方程組最小二乘解格式:
'''
from scipy.optimize import least_squares
least_squares(fun, x0)
注:用到loadtxt需自行準(zhǔn)備好文件【準(zhǔn)備文件】
'''
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)

1-4最大模特征值及對應(yīng)的特征向量

題目:

# 4-最大模特征值及對應(yīng)的特征向量
# 題目描述:求下列矩陣的最大模特征值及對應(yīng)的特征向量:
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('對應(yīng)的特征向量:\n', d)

運行結(jié)果如下:

Numpy學(xué)習(xí)(續(xù))

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

# 如果兩個數(shù)組 a 和 b 形狀相同,即滿足 a.shape == b.shape,那么 a*b 的結(jié)果就是 a 與 b 數(shù)組對應(yīng)位相乘。
# 這要求維數(shù)相同,且各維度的長度相同。
'''
對兩個數(shù)組,分別比較他們的每一個維度(若其中一個數(shù)組沒有當(dāng)前維度則忽略),滿足:
數(shù)組擁有相同形狀。
當(dāng)前維度的值相等。
當(dāng)前維度的值有一個是 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 將自動觸發(fā)廣播機制
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))     # 重復(fù)b的各個維度
print(x+yy)

1-Numpy 數(shù)學(xué)函數(shù)

1-1三角函數(shù)

# NumPy 數(shù)學(xué)函數(shù)
# NumPy 包含大量的各種數(shù)學(xué)運算的函數(shù),包括三角函數(shù),算術(shù)運算的函數(shù),復(fù)數(shù)處理函數(shù)等。

# 1-三角函數(shù)
# NumPy 提供了標(biāo)準(zhǔn)的三角函數(shù):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)
# 檢查結(jié)果【通過轉(zhuǎn)化為角度制】
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)
# 檢查結(jié)果:
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)
# 檢查結(jié)果:
jg3 = np.degrees(fzq)
print(jg3)  # 輸出 [ 0. 30. 45. 60. 90.]

2-舍入函數(shù)

2-1 numpy.around()

# 2-舍入函數(shù)
# 2-1 numpy.around()
'''
numpy.around() 函數(shù)返回指定數(shù)字的四舍五入值。
格式:
numpy.around(a,decimals)
參數(shù)說明:
a: 數(shù)組
decimals: 舍入的小數(shù)位數(shù)。 默認值為0。 如果為負,整數(shù)將四舍五入到小數(shù)點左側(cè)的位置

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

3-Numpy算術(shù)函數(shù)

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

  • 倒數(shù):reciprocal()
  • 冪:power()
  • 余數(shù):mod() | remainder()

:數(shù)組必須具有相同的形狀符合數(shù)組廣播規(guī)則

相關(guān)代碼如下:

import numpy as np
sz = np.arange(9, dtype=np.float_).reshape(3, 3)
sz2 = np.array([5, 2, 1])   # 注:如果相除,這里是被除數(shù)的話,里面不能有0
# 數(shù)組相加
xj = np.add(sz, sz2)
print(xj)
# 數(shù)組相減
xj2 = np.subtract(sz, sz2)
print(xj2)
# 數(shù)組相乘
xc = np.multiply(sz, sz2)
print(xc)
# 數(shù)組相除
xc2 = np.divide(sz, sz2)
print(xc2)
print()
# numpy.power()
# numpy.power() 函數(shù)將第一個輸入數(shù)組中的元素作為底數(shù),計算它與第二個輸入數(shù)組中相應(yīng)元素的冪
import numpy as np
m = np.array([1, 4, 8])     # 數(shù)組1
mc = np.power(m, 3)         # 數(shù)組1所有元素對應(yīng)的3次方
print(mc)   # 輸出 [  1  64 512]
m2 = np.array([1, 2, 3])    # 數(shù)組2
mc2 = np.power(m, m2)       # 數(shù)組1作為底數(shù),數(shù)組2作為冪
print(mc2)  # 輸出 [  1  16 512]
print()
# numpy.mod()
# numpy.mod() 計算輸入數(shù)組中相應(yīng)元素的相除后的余數(shù)
# 函數(shù) numpy.remainder() 也產(chǎn)生相同的結(jié)果
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學(xué)習(xí)(續(xù))

# pandas的SettingWithCopyWarning

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

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

注意先準(zhǔn)備好csv文件

Pandas 數(shù)據(jù)排序

Series的排序:

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

DataFrame的排序:
DataFrame.sort_values(by, ascending=True, inplace=False)
參數(shù)說明:
    · 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))       # 降序排序

運行結(jié)果分別如下:

DataFrame的排序

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

運行部分結(jié)果如下:

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]))

Pandas字符串處理

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

df['lrl'].str.replace("%", "").astype("int32")
# Pandas字符串處理:
'''
1-使用方法:先獲取Series的屬性,然后再屬性上調(diào)用函數(shù)
2-只能在字符串列上使用,不能再數(shù)字列上使用
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)
# 運行結(jié)果為: <pandas.core.strings.accessor.StringMethods object at 0x00000204444EBC48>
# 判斷是不是數(shù)字列
print(df['College'].str.isnumeric())
# print(df['College'].len)      # 報錯【示范】

# AttributeError: 'Series' object has no attribute 'len'
# AttributeError:“Series”對象沒有屬性“l(fā)en”

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

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

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

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

到此這篇關(guān)于python數(shù)學(xué)建模(SciPy+ Numpy+Pandas)的文章就介紹到這了,更多相關(guān)pyth Pandas內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Matplotlib繪制混淆矩陣的實現(xiàn)

    Matplotlib繪制混淆矩陣的實現(xiàn)

    對于機器學(xué)習(xí)多分類模型來說,其評價指標(biāo)除了精度之外,常用的還有混淆矩陣和分類報告,下面來展示一下如何繪制混淆矩陣,這在論文中經(jīng)常會用到。感興趣的可以了解一下
    2021-05-05
  • PyCharm使用matplotlib報MatplotlibDeprecationWarning問題解決辦法

    PyCharm使用matplotlib報MatplotlibDeprecationWarning問題解決辦法

    這篇文章主要給大家介紹了關(guān)于PyCharm使用matplotlib報MatplotlibDeprecationWarning問題解決的相關(guān)資料,主要是 matplotlib版本過高導(dǎo)致的,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-06-06
  • Python之Sklearn使用入門教程

    Python之Sklearn使用入門教程

    這篇文章主要介紹了Python之Sklearn使用入門教程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • PyTorch搭建多項式回歸模型(三)

    PyTorch搭建多項式回歸模型(三)

    這篇文章主要為大家詳細介紹了PyTorch搭建多項式回歸模型,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Python Pandas 獲取列匹配特定值的行的索引問題

    Python Pandas 獲取列匹配特定值的行的索引問題

    這篇文章主要介紹了Python Pandas 獲取列匹配特定值的行的索引問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • numpy np.newaxis 的實用分享

    numpy np.newaxis 的實用分享

    今天小編就為大家分享一篇numpy np.newaxis 的實用分享,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Anaconda中更新當(dāng)前環(huán)境的Python版本詳細步驟

    Anaconda中更新當(dāng)前環(huán)境的Python版本詳細步驟

    Anaconda是一個開源的Python發(fā)行版本,其包含了conda、Python等180多個科學(xué)包及其依賴項,下面這篇文章主要給大家介紹了關(guān)于Anaconda中更新當(dāng)前環(huán)境的Python版本的詳細步驟,需要的朋友可以參考下
    2024-08-08
  • Python制作豆瓣圖片的爬蟲

    Python制作豆瓣圖片的爬蟲

    本文給大家分享的是作者制作的爬取豆瓣首頁圖片的爬蟲代碼,代碼很簡單,大家可以參考下思路,希望可以幫到大家
    2017-12-12
  • 淺析Python3 pip換源問題

    淺析Python3 pip換源問題

    這篇文章主要介紹了Python3 pip換源問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • Python實現(xiàn)基于C/S架構(gòu)的聊天室功能詳解

    Python實現(xiàn)基于C/S架構(gòu)的聊天室功能詳解

    這篇文章主要介紹了Python實現(xiàn)基于C/S架構(gòu)的聊天室功能,結(jié)合實例形式詳細分析了Python實現(xiàn)聊天室功能的客戶端與服務(wù)器端相關(guān)實現(xiàn)技巧與操作注意事項,需要的朋友可以參考下
    2018-07-07

最新評論

沂水县| 临夏县| 富源县| 嵊泗县| 隆林| 木里| 浑源县| 尤溪县| 来宾市| 温宿县| 五常市| 太湖县| 神池县| 左贡县| 涟水县| 花莲县| 互助| 紫阳县| 宿松县| 白玉县| 霍州市| 光山县| 类乌齐县| 文山县| 土默特左旗| 来宾市| 遂宁市| 保康县| 衡东县| 上蔡县| 广丰县| 临沧市| 边坝县| 双桥区| 固原市| 贺州市| 德州市| 漠河县| 会宁县| 嘉峪关市| 弥渡县|