精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

數學建模三劍客之Numpy

電子工程師 ? 來源:未知 ? 作者:李倩 ? 2018-10-11 10:44 ? 次閱讀

不管是不是巴薩的球迷,只要你喜歡足球,就一定聽說過梅西(Messi)、蘇亞雷斯(Suarez)和內馬爾(Neymar)這個MSN組合。在眾多的數學建模輔助工具中,也有一個犀利無比的MSN組合,他們就是python麾下大名鼎鼎的 Matplotlib + Scipy + Numpy三劍客。

本文是我整理的MSN學習筆記,有些理解可能比較膚淺,甚至是錯誤的。如果因此誤導了某位看官,在工作中造成重大失誤或損失,我頂多只能賠償一頓飯——還得是我們樓下的十元盒飯。特此聲明。

文中代碼均從我的這臺時不時出點問題、鬧個情緒的Yoga 3 pro上復制而來,這意味著所有的代碼均可在下面的運行環境中順利運行:

pyhton 2.7.8

numpy 1.11.1

scipy 0.16.1

matplotlib 1.5.1

三劍客之Numpy

numpy是一個開源的python科學計算庫,包含了很多實用的數學函數,涵蓋線性代數、傅里葉變換和隨機數生成等功能。最初的numpy其實是scipy的一部分,后來才從scipy中分離出來。

numpy不是python的標準庫,需要單獨安裝。假定你的運行環境已經安裝了python包管理工具pip,numpy的安裝就非常簡單:

pip install numpy

數組對象

ndarray是多維數組對象,也是numpy最核心的對象。在numpy中,數組的維度(dimensions)叫做軸(axes),軸的個數叫做秩(rank)。通常,一個numpy數組的所有元素都是同一種類型的數據,而這些數據的存儲和數組的形式無關。

下面的例子,創建了一個三維的數組(在導入numpy時,一般都簡寫成np)。

import numpy asnp

a = np.array([[1,2,3],[4,5,6],[7,8,9]])

數據類型

numpy支持的數據類型主要有布爾型(bool)、整型(integrate)、浮點型(float)和復數型(complex),每一種數據類型根據占用內存的字節數又分為多個不同的子類型。常見的數據類型見下表。

創建數組

通常,我們用np.array()創建數組。如果僅僅是創建一維數組,也可以使用np.arange()或者np.linspace()的方法。np.zeros()、np.ones()、np.eye()則可以構造特殊的數據。np.random.randint()和np.random.random()則可以構造隨機數數組。

構造復雜數組

很多時候,我們需要從簡單的數據結構,構造出復雜的數組。例如,用一維的數據生成二維格點。

重復數組: tile

一維數組網格化: meshgrid

指定范圍和分割方式的網格化: mgrid

上面的例子中用到了虛數。構造虛數的方法如下:

>>> complex(2,5)

(2+5j)

數組的屬性

numpy的數組對象除了一些常規的屬性外,也有幾個類似轉置、扁平迭代器等看起來更像是方法的屬性。扁平迭代器也許是遍歷多維數組的一個簡明方法,下面的代碼給出了一個例子。

改變數組維度

numpy數組的存儲順序和數組的維度是不相干的,因此改變數組的維度是非常便捷的操作,除resize()外,這一類操作不會改變所操作的數組本身的存儲順序。

索引和切片

對于一維數組的索引和切片,numpy和python的list一樣,甚至更靈活。

假設有一棟2層樓,每層樓內的房間都是3排4列,那我們可以用一個三維數組來保存每個房間的居住人數(當然,也可以是房間面積等其他數值信息)。

數組合并

數組合并除了下面介紹的水平合并、垂直合并、深度合并外,還有行合并、列合并,以及concatenate()等方式。假如你比我還懶,那就只了解前三種方法吧,足夠用了。

數組拆分

拆分是合并的逆過程,概念是一樣的,但稍微有一點不同:

數組運算

數組和常數的四則運算,是數組的每一個元素分別和常數運算;數組和數組的四則運算則是兩個數組對應元素的運算(兩個數組有相同的shape,否則拋出異常)。

特別提示:如果想對數組內符合特定條件的元素做特殊處理,下面的代碼也許有用。

數組方法和常用函數

數組對象本身提供了計算算數平均值、求最大最小值等內置方法,numpy也提供了很多實用的函數。為了縮減篇幅,下面的代碼僅以一維數組為例,展示了這些方法和函數用法。事實上,大多數情況下這些方法和函數對于多維數組同樣有效,只有少數例外,比如compress函數。

矩陣對象

matrix是矩陣對象,繼承自ndarray類型,因此含有ndarray的所有數據屬性和方法。不過,當你把矩陣對象當數組操作時,需要注意以下幾點:

matrix對象總是二維的,即使是展平(ravel函數)操作或是成員選擇,返回值也是二維的

matrix對象和ndarray對象混合的運算總是返回matrix對象

創建矩陣

matrix對象可以使用一個Matlab風格的字符串來創建(以空格分隔列,以分號分隔行的字符串),也可以用數組來創建。

矩陣的特有屬性

矩陣有幾個特有的屬性使得計算更加容易,這些屬性有:

矩陣乘法

對ndarray對象而言,星號是按元素相乘,dot()函數則當作矩陣相乘。對于matrix對象來說,星號和dot()函數都是矩陣相乘。特別的,對于一維數組,dot()函數實現的是向量點乘(結果是標量),但星號實現的卻不是差乘。

線性代數模塊

numpy.linalg 是numpy的線性代數模塊,可以用來解決逆矩陣、特征值、線性方程組以及行列式等問題。

計算逆矩陣

盡管matrix對象本身有逆矩陣的屬性,但用numpy.linalg模塊求解矩陣的逆,也是非常簡單的。

計算行列式

如何計算行列式,我早已經不記得了,但手工計算行列式的痛苦,我依然記憶猶新。現在好了,你在手機上都可以用numpy輕松搞定(前提是你的手機上安裝了python + numpy)。

m = np.mat('0 1 2; 1 0 3; 4 -3 8')

np.linalg.det(m)# 什么?這就成了?

2.0

計算特征值和特征向量

截至目前,我的工作和特征值、特征向量還有沒任何關聯。記錄這一節,純粹是為了我女兒,她正在讀數學專業。

求解線性方程組

有線性方程組如下:

x – 2y + z = 02y -8z = 8-4x + 5y + 9z = -9

求解過程如下:

三劍客之Matplotlib

matplotlib 是python最著名的繪圖庫,它提供了一整套和Matlab相似的命令API,十分適合交互式地進行制圖。而且也可以方便地將它作為繪圖控件,嵌入GUI應用程序中。matplotlib 可以繪制多種形式的圖形包括普通的線圖,直方圖,餅圖,散點圖以及誤差線圖等;可以比較方便的定制圖形的各種屬性比如圖線的類型,顏色,粗細,字體的大小等;它能夠很好地支持一部分 TeX 排版命令,可以比較美觀地顯示圖形中的數學公式。

pyplot介紹

Matplotlib 包含了幾十個不同的模塊, 如 matlab、mathtext、finance、dates 等,而 pyplot 則是我們最常用的繪圖模塊,這也是本文介紹的重點。

中文顯示問題的解決方案

有很多方法可以解決此問題,但下面的方法恐怕是最簡單的解決方案了(我只在windows平臺上測試過,其他平臺請看官自測)。

繪制最簡單的圖形

>>> import numpy asnp

>>> import matplotlib.pyplot asplt

>>> x = np.arange(0,2*np.pi,0.01)

>>> y = np.sin(x)

>>> plt.plot(x,y)

>>> plt.show()

設置標題、坐標軸名稱、坐標軸范圍

如果你在python的shell中運行下面的代碼,而shell的默認編碼又不是utf-8的話,中文可能仍然會顯示為亂碼。你可以嘗試著把 u’正弦曲線’ 寫成 ‘正弦曲線’.decode(‘gbk’)或者‘正弦曲線’.decode(‘utf-8’)

設置點和線的樣式、寬度、顏色

plt.plot函數的調用形式如下:

plot(x,y,color='green',linestyle='dashed',linewidth=1,marker='o',markerfacecolor='blue',markersize=6)

plot(x,y,c='g',ls='--',lw=1,marker='o',mfc='blue',ms=6)

color指定線的顏色,可簡寫為“c”。顏色的選項為:

藍色: ‘b’ (blue)

綠色: ‘g’ (green)

紅色: ‘r’ (red)

墨綠: ‘c’ (cyan)

洋紅: ‘m’ (magenta)

黃色: ‘y’ (yellow)

黑色: ‘k’ (black)

白色: ‘w’ (white)

灰度表示: e.g. 0.75 ([0,1]內任意浮點數)

RGB表示法: e.g. ‘#2F4F4F’ 或 (0.18, 0.31, 0.31)

linestyle指定線型,可簡寫為“ls”。線型的選項為:

實線: ‘-’ (solid line)

虛線: ‘–’ (dashed line)

虛點線: ‘-.’ (dash-dot line)

點線: ‘:’ (dotted line)

無: ”或’ ‘或’None’

linewidth指定線寬,可簡寫為“lw”。

marker描述數據點的形狀

點線: ‘.’

點線: ‘o’

加號: ‘+

叉號: ‘x’

上三角: ‘^’

上三角: ‘v’

markerfacecolor指定數據點標記的表面顏色,可 簡寫為“ mfc”。

markersize指定數據點標記的大小,可 簡寫為“ ms”。

文本標注和圖例

我們分別使用不同的線型、顏色來繪制以10、e、2為基的一組冪函數曲線,演示文本標注和圖例的使用。

在繪制圖例時,loc用于指定圖例的位置,可用的選項有:

best

upper right

upper left

lower left

lower right

繪制多軸圖

在介紹如何將多幅子圖繪制在同一畫板的同時,順便演示如何繪制直線和矩形。我們可以使用subplot函數快速繪制有多個軸的圖表。subplot函數的調用形式如下:

subplot(numRows, numCols, plotNum)

subplot將整個繪圖區域等分為numRows行 * numCols列個子區域,然后按照從左到右,從上到下的順序對每個子區域進行編號,左上的子區域的編號為1。如果numRows,numCols和plotNum這三個數都小于10的話,可以把它們縮寫為一個整數,例如subplot(323)和subplot(3,2,3)是相同的。subplot在plotNum指定的區域中創建一個軸對象。如果新創建的軸和之前創建的軸重疊的話,之前的軸將被刪除。

三劍客之Scipy

前面已經說過,最初的numpy其實是scipy的一部分,后來才從scipy中分離出來。scipy函數庫在numpy庫的基礎上增加了眾多的數學、科學以及工程計算中常用的庫函數。例如線性代數、常微分方程數值求解、信號處理、圖像處理、稀疏矩陣等等。由于其涉及的領域眾多,我之于scipy,就像盲人摸大象,只能是摸到哪兒算哪兒。

插值

一維插值和二維插值,是我最常用的scipy的功能之一,也是最容易上手的。

一維插值和樣條插值

下面的例子清楚地展示了線性插值和樣條插值之后的數據形態。

將原始數據以及線性插值和樣條插值之后的數據繪制在一起,效果會比較明顯:

代碼如下:

特別說明:樣條插值附帶了很多默認參數,下面是簡單的說明。詳情請自行搜索。

scipy.interpolate.splrep(x,y,w=None,xb=None,xe=None,k=3,task=0,s=None,t=None,full_output=0,per=0,quiet=1)

# 參數s用來確定平滑點數,通常是m-SQRT(2m),m是曲線點數。如果在插值中不需要平滑應該設定s=0。splrep()輸出的是一個3元素的元胞數組(t,c,k),其中t是曲線點,c是計算出來的系數,k是樣條階數,通常是3階,但可以通過k改變。

scipy.interpolate.splev(x,tck,der=0)

# 其中的der是進行樣條計算是需要實際計算到的階數,必須滿足條件der<=k

擬合

在工作中,我們常常需要在圖中描繪某些實際數據觀察的同時,使用一個曲線來擬合這些實際數據。所謂擬合,就是找出符合數據變化趨勢的曲線方程,或者直接繪制出擬合曲線。

使用numpy.polyfit擬合

下面這段代碼,基于Numpy模塊,可以直接繪制出擬合曲線,但我無法得到曲線方程(盡管輸出了一堆曲線參數)。這是一個值得繼續深入研究的問題。

3個擬合結果顯示在下圖中。

使用scipy.optimize.optimize.curve_fit擬合

scipy提供的擬合,貌似需要先確定帶參數的曲線方程,然后由scipy求解方程,返回曲線參數。我們還是以上面的一組數據為例使用scipy擬合曲線。

可以看出,曲線近似正弦函數。構建函數y=a*sin(x*pi/6+b)+c,使用scipy的optimize.curve_fit函數求出a、b、c的值:

求解非線性方程(組)

在數學建模中,需要對一些稀奇古怪的方程(組)求解,Matlab自然是首選,但Matlab不是免費的,scipy則為我們提供了免費的午餐!scipy.optimize庫中的fsolve函數可以用來對非線性方程(組)進行求解。它的基本調用形式如下:

fsolve(func, x0)

func(x)是計算方程組誤差的函數,它的參數x是一個矢量,表示方程組的各個未知數的一組可能解,func返回將x代入方程組之后得到的誤差;x0為未知數矢量的初始值。

我們先來求解一個簡單的方程:sin(x)?cos(x)=0.2

>>> from scipy.optimize import fsolve

>>> import numpy asnp

>>> deff(A):

x = float(A[0])

return[np.sin(x) - np.cos(x) - 0.2]

>>> result = fsolve(f,[1])

array([0.92729522])

>>> print result

[0.92729522]

>>> printf(result)

[2.7977428707082197e-09]

哈哈,易如反掌!再來一個方程組:

4x2?2sin(yz)=0

5y+3=0

yz?1.5=0

圖像處理

在scipy.misc模塊中,有一個函數可以載入Lena圖像——這副圖像是被用作圖像處理的經典示范圖像。我只是簡單展示一下在該圖像上的幾個操作。

載入Lena圖像,并顯示灰度圖像

應用中值濾波掃描信號的每一個數據點,并替換為相鄰數據點的中值

旋轉圖像

應用Prewitt濾波器(基于圖像強度的梯度計算)

后記

這篇博文自2016年9月初動筆,斷斷續續寫了5個多月。延宕這么久,除了自身懶惰的原因外,主要是因為MSN這個主題涉及的內容太過繁雜,又極其晦澀,無論怎么努力,總怕掛一漏萬、貽笑大方。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    6898

    瀏覽量

    88833
  • 函數
    +關注

    關注

    3

    文章

    4307

    瀏覽量

    62432

原文標題:數學建模三劍客 MSN

文章出處:【微信號:DBDevs,微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Wi-Fi、藍牙和蜂窩網絡三劍客解決方案

    應用程序創建連接提供了不同方法。其中,當屬Wi-Fi、藍牙和蜂窩網絡最為普及。 多種技術都為物聯網應用程序創建連接提供了不同方法。其中,最為普遍的Wi-Fi、藍牙和蜂窩網絡可謂當下的三劍客。使用這種技術要取決于應用程序
    的頭像 發表于 05-22 09:43 ?9920次閱讀
    Wi-Fi、藍牙和蜂窩網絡<b class='flag-5'>三劍客</b>解決方案

    地平線:集齊“三劍客”,讓人人都能會造機器人

    7月25日,在“地平線2023機器人開發者創享日”活動現場,四足機械狗、張牙舞爪的機械臂、“跑起來的高達”等機器人產品遍地跑,讓人著實大開眼界。如何實現?那就是集齊地平線召喚機器人的“三劍客
    的頭像 發表于 07-31 15:27 ?2507次閱讀
    地平線:集齊“<b class='flag-5'>三劍客</b>”,讓人人都能會造機器人

    數學

    數學 建模雙雄
    發表于 08-06 13:18

    【西師大三劍客】基于物聯網的筆記本電子防盜鎖網絡

    ` 本帖最后由 wangjiamin2014 于 2015-1-9 17:17 編輯 項目名稱: 基于物聯網的筆記本電子防盜鎖網絡團隊名稱:西師大三劍客團隊成員:李波|徐春|劉名楊作品圖片作品
    發表于 12-31 10:27

    小米也玩智慧城市?三劍客聯手“不務正業”

    (小米物聯網)和AI集成服務等。小結看陣勢,本次三劍客聯手布局智慧城市可不是“不務正業”:小米提供硬件和用戶、易華錄提供數據存儲技術、金山云加以城市云計算服務,三劍客聯手將有望給智慧城市帶來一場全新的變革
    發表于 11-15 11:42

    shell文本的處理方法是什么

    shell文本處理三劍客—grep
    發表于 05-27 12:32

    嵌入式Linux系統知識架構

    嵌入式Linux系統知識架構及層次嵌入式Linux系統構成及啟動略析嵌入式Linux三劍客uboot技術嵌入式Linux三劍客之內核技術嵌入式Linux三劍客
    發表于 10-27 07:22

    3ds max7渲染傳奇三劍客-VRay教程

    3ds max7渲染傳奇三劍客-VRay教程
    發表于 09-07 17:14 ?0次下載
    3ds max7渲染傳奇<b class='flag-5'>三劍客</b>-VRay教程

    鋰離子正極三劍客之一:鈷酸鋰

    鋰離子正極三劍客之一:鈷酸鋰 1,LiCoO2的一種合成方法    &nbs
    發表于 11-04 14:09 ?1319次閱讀

    鋰離子正極三劍客之一:錳酸鋰

    鋰離子正極三劍客之一:錳酸鋰 顆粒大小和形貌、粒度分布、比表面積、振實密度以及電極加工性能、
    發表于 11-04 14:33 ?1256次閱讀

    機器學習三劍客Numpy怎么學

    玩數據分析、數據挖掘、AI的最常用的數據分析庫numpy大總結,總結部分主要是對于機器學習和深度學習處理時常用的函數單元。
    的頭像 發表于 05-31 16:57 ?1441次閱讀

    Redmi預告Note 9三劍客神秘代言人

    Redmi 紅米手機官方微博今晚公開了一張海報,暗示胞胎音樂才女將代言紅米 Note 9三劍客手機。據推斷,這名才女應該是今年夏天的綜藝節目《樂隊的夏天》第二季的參與者福祿壽。 海報中
    的頭像 發表于 11-22 09:45 ?1878次閱讀

    Redmi Note 9 Pro系列三劍客正式亮相

    11月26日晚,Redmi召開Note 9系列新品發布會,帶來了Note 9三劍客,分別是Note 9 4G版、Note 9、Note 9 Pro。
    的頭像 發表于 11-27 09:56 ?1947次閱讀

    號稱億影的Redmi Note 9 Pro正式發布反應俱佳

    今日晚間,Redmi Note 9系列“三劍客”如約發布,分別為Note 9 Pro、Note 9、Note 4G。其中,號稱億影的Redmi Note 9 Pro率先登場。
    的頭像 發表于 11-27 10:11 ?1778次閱讀

    【嵌入式】構建嵌入式Linux系統(uboot、內核、文件系統)

    嵌入式Linux系統知識架構及層次嵌入式Linux系統構成及啟動略析嵌入式Linux三劍客uboot技術嵌入式Linux三劍客之內核技術嵌入式Linux三劍客
    發表于 10-20 18:20 ?42次下載
    【嵌入式】構建嵌入式Linux系統(uboot、內核、文件系統)