python畫函數圖像要用到的模塊_教你如何繪制數學函數圖像——numpy和matplotlib的簡單應用...

numpy和matplotlib的簡單應用

一、numpy庫

1.什么是numpy

NumPy系統是Python的一種開源的數值計算擴展。這種工具可用來存儲和處理大型矩陣,比Python自身的嵌套列表(nested list structure)結構要高效的多(該結構也可以用來表示矩陣(matrix))。

numpy是科學計算包,支持N維數組運算、處理大型矩陣、成熟的廣播函數庫、矢量運算、線性代數、傅里葉變換、隨機數生成,并可與C++/Fortran語言無縫結合。

2.numpy的安裝

在Python v3中默認安裝已經包含了numpy

如果沒有安裝,可以在命令行(ctrl+R,輸入cmd)中輸入pip install numpy即可自動安裝使用

1629853-20190422210253346-723137485.png

3.numpy的使用

注意:這里的矩陣跟線性代數(高等代數)中的矩陣一致,運算方法一致

(1)導入模塊

import numpy as np #用np來代替numpy

(2)生成數組(創建數組)

1 importnumpy as np2 print(np.array([1, 2, 3, 4, 5])) #把列表轉換為數組

3 print(np.array((1, 2, 3, 4, 5))) #把元組轉換成數組

4 print(np.array(range(5))) #把range對象轉換成數組

5 print(np.array([[1, 2, 3], [4, 5, 6]])) #二維數組

6 print(np.arange(8)) #類似于內置函數range()

7 print(np.arange(1, 10, 2))8 print(np.linspace(0, 10, 11)) #等差數組,包含11個數

9 print(np.linspace(0, 10, 11, endpoint=False)) #不包含終點

10 print(np.logspace(0, 100, 10)) #對數數組

11 print(np.logspace(1,6,5, base=2)) #對數數組,相當于2 ** np.linspace(1,6,5)

12 print(np.zeros(3)) #全0一維數組

13 print(np.ones(3)) #全1一維數組

14 print(np.zeros((3,3))) #全0二維數組,3行3列

15 print(np.zeros((3,1))) #全0二維數組,3行1列

16 print(np.zeros((1,3))) #全0二維數組,1行3列

17 print(np.ones((1,3))) #全1二維數組

18 print(np.ones((3,3))) #全1二維數組

19 print(np.identity(3)) #單位矩陣

20 print(np.identity(2))21 print(np.empty((3,3))) #空數組,只申請空間而不初始化,元素值是不確定的

結果如圖所示(因為是一次性輸出全部,所以顯示不是很好)

1629853-20190422212711155-1294852566.png

(3)數組的運算

1/ 數組與數值的運算

x=np.array((1,2,3,4,5)) #創建數組

x*2    #乘法

x/2   #除法

x//2   #整除

x**3   #冪次方

x+2   #加法

x%3   #求余

2**x #2的(x中的每一個元素)次方,同時生成另一個數組

2/x   #2除以x中的每一個元素,同時生成另外一個數組

63//x #63除以x中的每一個元素,取整數,同時生成另外一個數組

2/ 數組與數組的運算

a= np.array((1,2,3)) #先創建兩個數組

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

數組之間的基本運算

c=a*b

c/b

a+a

a*a

c-a

c/a

(4) 數組的轉置

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

1629853-20190422214841228-62178946.png

b.T #轉置

1629853-20190422214901545-632568396.png

值得注意的是:一維數組轉置以后和原來是一樣的

(5)點積和內積

a = np.array((5, 6, 7)) #創建數組a

b = np.array((6, 6, 6)) #創建數組b

a.dot(b)         #向量內積

np.dot(a,b)

c = np.array(([1,2,3],[4,5,6],[7,8,9]))       # 二維數組

c.dot(a)        # 二維數組的每行與一維向量計算內積

a.dot(c)                # 一維向量與二維向量的每列計算內積

(6) 元素訪問

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

b[0]                    # 第0行

b[0][0]                         # 第0行第0列的元素值

b[0,2]                    # 第0行第2列的元素值

b[[0,1]]                    # 第0行和第1行

b[[0,1], [1,2]]                    #第0行第1列的元素和第1行第2列的元素

x = np.arange(0,100,10,dtype=np.floating)

x[[1, 3, 5]]              # 同時訪問多個位置上的元素

x[[1, 3, 5]] = 3              # 把多個位置上的元素改為相同的值

x[[1, 3, 5]] = [34, 45, 56]              # 把多個位置上的元素改為不同的值

(7)數組支持函數運算

np.sin(x)             #求正弦值

np.cos(x)                        #求余弦值

np.round(_)                       #四舍五入

x = np.random.rand(10) * 10     # 包含10個隨機數的數組

np.floor(x)           # 所有元素向下取整

np.ceil(x)                        # 所有元素向上取整

(8) 改變數組大小

a = np.arange(1, 11, 1) #創建一維數組

a.shape = 2, 5                     #將數組改為2行5列

a.shape = 5, -1         #將元素分成5列, -1表示自動計算,原地修改

b = a.reshape(2,5)          # reshape()方法返回新數組

(9) 切片操作

a[::-1]            # 反向切片

a[::2]            # 隔一個取一個元素

a[:5]            # 前5個元素

c[0, 2:5]                   # 第0行中下標[2,5)之間的元素值

c[1]                  # 第1行所有元素

c[2:5, 2:5]                  # 行下標和列下標都介于[2,5)之間的元素值

(10) 布爾運算(結果一般是True或者False顯示)

x > 0.5                  # 比較數組中每個元素值是否大于0.5

x[x>0.5]                  # 獲取數組中大于0.5的元素,可用于檢測和過濾異常值

x < 0.5

np.all(x<1)                        # 測試是否全部元素都小于1

np.any([1,2,3,4])                # 是否存在等價于True的元素

a > b                 # 兩個數組中對應位置上的元素比較

a[a>b]                         #輸出相對應元素a>b的元素位置

(11)取整運算

x = np.random.rand(10)*50              # 10個隨機數

np.int64(x)                       # 取整

np.int32(x)

(12)廣播

a = np.arange(0,60,10).reshape(-1,1)        # 創建列向量

b = np.arange(0,6)         # 創建行向量

a[0] + b         # 數組與標量的加法

a + b                          #行向量與列向量的相加

a*b                           #行向量與列向量的相乘

(13) 計算唯一值以及出現的次數

x = np.random.randint(0, 10, 7) #創建0到10之間的隨機數,個數為7

np.bincount(x)                     #計算元素出現的次數,由最小的元素開始,到最大值

np.sum(_)                     # 所有元素出現次數之和等于數組長度

np.unique(x)                     # 返回唯一元素值

(14) 矩陣運算

a_list = [3, 5, 7]

a_mat = np.matrix(a_list)          # 創建矩陣

a_mat.T           # 矩陣轉置

a_mat.shape           # 矩陣形狀

a_mat.size           # 元素個數

a_mat.mean()         # 元素平均值

a_mat.sum() # 所有元素之和

a_mat.max() # 最大值

a_mat.max(axis=1)           # 橫向最大值

a_mat.max(axis=0)                   # 縱向最大值

a_mat * b_mat.T          # 矩陣相乘

c_mat = np.matrix([[1, 5, 3], [2, 9, 6]]) # 創建二維矩陣

c_mat.argsort(axis=0) # 縱向排序后的元素序號

c_mat.argsort(axis=1)        # 橫向排序后的元素序號

d_mat.diagonal() # 矩陣對角線元素

x = np.matrix(np.random.randint(0, 10, size=(3,3)))

x.std()            # 標準差

x.std(axis=1)          # 橫向標準差

x.std(axis=0)             # 縱向標準差

x.var(axis=0)                      # 縱向方差

二、matplotlib庫

1.什么是matplotlib庫

matplotlib模塊依賴于numpy模塊和tkinter模塊,可以繪制多種形式的圖形,包括線圖、直方圖、餅狀圖、散點圖、誤差線圖等等。

2.matplotlib庫的安裝

在命令行(ctrl+R,輸入cmd)中輸入pip install matplotlib即可自動安裝使用

1629853-20190423000248281-1437493696.png

3.matplotlib庫的的使用

導入

import matplotlib

繪制正弦函數圖像

1 importnumpy as np2 importpylab as pl3

4 t = np.arange(0.0, 2.0*np.pi, 0.01) #生成數組,0到2π之間,以0.01為步長

5 s = np.sin(t) #對數組中所有元素求正弦值,得到新數組

6 pl.plot(t,s) #畫圖,以t為橫坐標,s為縱坐標

7 pl.xlabel('x') #設置坐標軸標簽

8 pl.ylabel('y')9 pl.title('sin') #設置圖形標題

10 pl.show() #顯示圖形

結果如圖所示

1629853-20190424101005595-949605458.png

繪制散點圖

1 importnumpy as np2 importpylab as pl3 a = np.arange(0, 2.0*np.pi, 0.1)4 b =np.cos(a)5 pl.scatter(a,b)6 pl.show()

結果如圖所示

1629853-20190424115741221-2049738362.png

繪制帶有中文標簽和圖例的圖像

1 importnumpy as np2 importpylab as pl3 importmatplotlib.font_manager as fm4

5 myfont = fm.FontProperties(fname=r'C:\Windows\Fonts\STKAITI.ttf') #設置字體

6 t = np.arange(0.0, 2.0*np.pi, 0.01) #自變量取值范圍

7 s = np.sin(t) #計算正弦函數值

8 z = np.cos(t) #計算余弦函數值

9 pl.plot(t, s, label='正弦')10 pl.plot(t, z, label='余弦')11 pl.xlabel('x-變量', fontproperties='STKAITI', fontsize=18) #設置x標簽

12 pl.ylabel('y-正弦余弦函數值', fontproperties='simhei', fontsize=18)13 pl.title('sin-cos函數圖像', fontproperties='STLITI', fontsize=24)14 pl.legend(prop=myfont) #設置圖例

15 pl.show()

結果如圖所示

1629853-20190424120317091-361136788.png

等等~~~~~~~~~~~~~~~

三、用雷達圖表示python123中的成績數據

1 importnumpy as np2 importmatplotlib.pyplot as plt3 importmatplotlib4 matplotlib.rcParams['font.family']='LiSu'#定義字體

5 matplotlib.rcParams['font.sans-serif'] = ['LiSu']6 labels=np.array(['第一周','第二周','第三周','第四周','第五周','第六周'])#定義標簽

7 data=np.array([8,10,9,10,11,7])8 angles=np.linspace(0,2*np.pi,6,endpoint=False)9 data=np.concatenate((data,[data[0]]))10 angles=np.concatenate((angles,[angles[0]]))11 fig=plt.figure(facecolor="yellow")#顏色設置

12 plt.subplot(111,polar=True)13 plt.plot(angles,data,'bo-',color='g',linewidth=2)14 plt.fill(angles,data,facecolor='g',alpha=0.25)15 plt.thetagrids(angles*180/np.pi,labels)16 plt.figtext(0.52,0.95,'xiayiLL的python123成績雷達圖',ha='center')#圖像命名

17 plt.grid(True)18 plt.show()

結果如圖所示

1629853-20190424124525310-1507329759.png

四、自定義手繪風

代碼如下

1 #-*- coding: utf-8 -*-

2

3 '''手繪圖像效果'''

4 importnumpy as np5 from PIL importImage6 vec_el = np.pi/2.2 #光源的俯視角度,弧度值

7 vec_az = np.pi/4. #光源的方位角度,弧度值

8 depth = 6. #深度權值,值越小背景區域越接近白色,值越大背景區域越接近黑色

9 im = Image.open('C:\\Users\Administrator\Desktop\spyder\路飛.jpg').convert('L') #打開圖像并轉變為灰度模式

10 a = np.asarray(im).astype('float')11 grad = np.gradient(a) #取圖像灰度的梯度值

12 grad_x, grad_y = grad #分別取圖像的橫縱梯度值

13 grad_x = grad_x * depth / 100.14 grad_y = grad_y * depth / 100.15 dx = np.cos(vec_el) * np.cos(vec_az) #光源對x軸的影響

16 dy = np.cos(vec_el) * np.sin(vec_az) #光源對y軸的影響

17 dz = np.sin(vec_el) #光源對z軸的影響

18 A = np.sqrt(grad_x**2 + grad_y**2 + 1.)19 uni_x = grad_x/A20 uni_y = grad_y/A21 uni_z = 1./A22 a2 = 255*(dx * uni_x + dy * uni_y + dz * uni_z) #光源歸一化

23 a2 = a2.clip(0, 255) #預防溢出

24 im2 = Image.fromarray(a2.astype('uint8')) #重構圖像

25 im2.save('HandMade_.jpg') #保存圖像

26 im2.show() #顯示圖像

原圖如下

1629853-20190424125532419-1282439086.png

經代碼轉變手繪圖

1629853-20190424125433374-1069787625.png

五、感興趣的圖像

分段函數圖像,代碼如下

1 importnumpy as np2 importmatplotlib.pyplot as plt3

4 x = np.linspace(0,100,1000)5 interval0 = [1 if (i<30) else 0 for i inx]6 interval1 = [1 if (i>=30 and i<50) else 0 for i inx]7 interval2 = [1 if (i>=50) else 0 for i inx]8 y = np.cos(x)* interval0 + x * interval1 + np.sin(x)*interval29 plt.plot(x,y)10 plt.show()

結果如圖所示

1629853-20190424131854038-685661682.png

loading.gif

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271491.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271491.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271491.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

臺式電腦如何使用無線網,wifi怎么連接?

隨著網絡的發展&#xff0c;現在無線路由器已經深入到尋常百姓家了&#xff0c;無線信號滿街都是&#xff0c;但是作為臺式電腦&#xff0c;卻不具備wifi自動連接這個功能。那么&#xff0c;臺式電腦怎么用wifi呢&#xff1f;下面小編就教大家wifi如何連接。1、電腦必須安裝一塊…

軟件測試的缺陷管理系統有哪些,簡述:一款優秀的缺陷管理系統有哪些功能特點!...

原標題&#xff1a;簡述&#xff1a;一款優秀的缺陷管理系統有哪些功能特點&#xff01;什么是缺陷管理系統&#xff1f;缺陷管理系統指的是在軟件生命周期中識別、管理、溝通任何缺陷的過程(從缺陷的識別&#xff0c;到缺陷的解決關閉)&#xff0c;確保缺陷被跟蹤管理而不丟失…

haproxy服務啟動命令_安裝haproxy和haproxy命令

1.安裝haproxyCentOS自帶了haproxy&#xff0c;但可能版本比較老。可以在IUS源上找到最新穩定版的haproxy。cat </etc/yum.repos.d/ius.repo[ius]nameiusrepobaseurlhttps://mirrors.tuna.tsinghua.edu.cn/ius/stable/CentOS/$releasever/\$basearchgpgcheck0enable1eofyum …

JVM——類加載機制

虛擬機把描述類的數據從Class文件加載到內存&#xff0c;并對數據進行校驗、轉換解析和初始化&#xff0c;最終形成可以被虛擬機直接使用的Java類型&#xff0c;這就是虛擬機的類加載機制。 在Java語言中&#xff0c;類型的加載、連接和初始化過程都是在程序運行期間完成的&…

操作系統基礎知識筆記

一、操作系統相關概念 計算機軟件&#xff1a;系統軟件和應用軟件。 計算機系統資源&#xff1a;硬件資源、軟件資源。 硬件資源&#xff1a;中央處理器、存儲器、輸入、輸出等物理設備。 軟件資源&#xff1a;以文件形式保存到存儲器上的程序和數據信息。 定義&#xff1a;有效…

數據庫字段

一、數據庫設計 1、關鍵單詞 &#xff08;1&#xff09;、預付&#xff1a;prepay &#xff08;2&#xff09;、記賬&#xff1a;bill &#xff08;3&#xff09;、發票&#xff1a;invoice &#xff08;4&#xff09;、備注&#xff1a;remark &#xff08;5&#xff09…

python一般學多久可以考試_為何Python適合初學者 一般Python要學習多久

為何Python適合初學者?一般Python要學習多久?很多人都覺得&#xff0c;Python是一門很好學的語言&#xff0c;非常適合入門。但更多人都是不清楚具體原因的。那么&#xff0c;我們不如一起來看看Python為何更適合初學者&#xff0c;為何更適合學習吧。另外&#xff0c;這門偉…

操作系統基礎:進程知識筆記(一)

進程介紹 進程管理也稱為處理機管理。進程主要是為了解決多道程序批處理系統和分時系統中針對多個并發執行的程序&#xff0c;用來描述系統中執行時動態變化過程。進程屬于自愿分配和獨立運行的基本單位。 1、進程的概念知識 1.1 程序順序執行的特征 程序順序執行的特征&#x…

ngod規范_NGOD的架構說明與比較

下一代視頻點播服務(NGOD)的架構說明與比較目錄1ISA和NGOD的誕生背景......................................................................................21.1為什么要運營商制定標準&#xff1f;...................................................................2…

計算機電子琴彈奏怎么打開,怎么打開電腦鍵盤電子琴軟件

五、使用對話框中的快捷鍵   目的快捷鍵   取消當前任務 ESC   如果當前控件是個按鈕&#xff0c;要   單擊該按鈕或者如果當前控   件是個復選框&#xff0c;要選擇或清   除該復選框或者如果當前控   件是個選項按鈕&#xff0c;要單擊該   選項空格鍵   單…

JVM——三個ClassLoader詳解

類裝載工作由ClassLoader及其子類負責&#xff0c;ClassLoader是一個重要的Java執行時系統組件&#xff0c;它負責在運行時查找和裝入Class字節碼文件。JVM在運行時會產生三個ClassLoader&#xff1a;根裝載器、ExtClassLoader&#xff08;擴展類裝載器&#xff09;和AppClassL…

c++頭文件_51單片機C語言編程知多少:幾人不知頭文件,你要的干貨在這里了

近期寫了一些比較大的單片機程序&#xff0c;找了很多參考資料&#xff0c;看了大量別人的程序。我從中發現了自己對于C語言編程還只是知道如何實現功能&#xff0c;但對編程規范掌握的不好&#xff0c;編程習慣也沒有很好的養成。學了這么久的單片機&#xff0c;還真是挺難為情…

最常問的MySQL面試題集合

除了基礎題部分&#xff0c;本文還收集整理的MySQL面試題還包括如下知識點或題型&#xff1a;MySQL高性能索引SQL語句MySQL查詢優化MySQL高擴展高可用MySQL安全性問題1&#xff1a;char、varchar的區別是什么&#xff1f;varchar是變長而char的長度是固定的。如果你的內容是固定…

計算機打印機共享失敗,局域網共享打印機連接失敗怎么辦

在局域網中由于辦公需要&#xff0c;經常要連接網絡打印機&#xff0c;但是有時候就無法連接&#xff0c;提示各種連接失敗&#xff0c;下面是學習啦小編給大家整理的一些有關局域網共享打印機連接失敗的解決方法&#xff0c;希望對大家有幫助!局域網共享打印機連接失敗的解決方…

高斯模糊java代碼_OpenCV3 Java圖形圖像上的高斯模糊(Imgproc.GaussianBlur)

代碼案例&#xff1a;package com.what21.opencv.demo;import org.opencv.core.Core;import org.opencv.core.Mat;import org.opencv.core.Size;import org.opencv.imgcodecs.Imgcodecs;import org.opencv.imgproc.Imgproc;public class GaussianBlur {public static void main…

實時數據集成

企業應用集成 面向服務的體系結構 (SOA) 目前應該是一個很受歡迎的名詞&#xff0c;中間件技術人員幾乎到了言必稱SOA的程度&#xff0c;數據集成當然也不例外&#xff0c;在Oracle openworld2008大會上&#xff0c;就推出了一堆數據集成的專場演講&#xff0c;其中和SOA結合最…

idea 中代碼大小寫切換快捷鍵

idea用使用 CTRL SHIFT U 使用前&#xff1a; 使用后&#xff1a;

nginx做服務器入口_Nginx實現http反向代理

什么是反向代理&#xff1f;反向代理&#xff08;Reverse Proxy&#xff09;方式是指以代理服務器來接受internet上的連接請求&#xff0c;然后將請求轉發給內部網絡上的服務器&#xff0c;并將從服務器上得到的結果返回給internet上請求連接的客戶端&#xff0c;此時代理服務器…

操作系統基礎:進程知識筆記(二)

一、管程 1、管道概念概念 管道是用于連接一個讀進程和一個寫進程。用來實現它們之間通信的共享文件。 2、管程的概念 管程是由一些共享數據、一組能為并發進程所執行的作用在共享數據上的操作集合、初始代碼、以及存取權組成。管程提供了一種可以允許多線程安全、有效地共享抽…