numpy 與 matplotlib 的應用

来源:https://www.cnblogs.com/bpf-1024/archive/2019/04/21/10747738.html
-Advertisement-
Play Games

numpy 與 matplotlib 的應用 一、庫函數介紹 1. numpy庫 NumPy(Numeric Python)提供了一個N維的數組類型ndarray,Numpy底層使用C語言編寫,內部解除了GIL(全局解釋器鎖),其對數組的操作速度不受Python解釋器的限制,效率遠高於純Python ...


numpy 與 matplotlib 的應用

一、庫函數介紹

1. numpy庫

  NumPy(Numeric Python)提供了一個N維的數組類型ndarray,Numpy底層使用C語言編寫,內部解除了GIL(全局解釋器鎖),其對數組的操作速度不受Python解釋器的限制,效率遠高於純Python代碼。

  ndarray到底跟原生python列表的區別:

  ndarray中的所有元素的類型都是相同的,而Python列表中的元素類型是任意的,所以ndarray在存儲元素時記憶體可以連續,而python原生list就只能通過定址方式找到下一個元素,這雖然也導致了在通用性能方面Numpy的ndarray不及Python原生list,但在科學計算中,Numpy的ndarray就可以省掉很多迴圈語句,代碼使用方面比Python原生list簡單的多。

2. matplotlib庫

  matplotlib 是一個 Python 的 2D繪圖庫,也是Python編程語言及其數值數學擴展包 NumPy的可視化操作界面。它利用通用的圖形用戶界面工具包,如Tkinter, wxPython, Qt或GTK+嚮應用程式嵌入式繪圖提供了應用程式介面(API)。此外,matplotlib還有一個基於圖像處理庫(如開放圖形庫OpenGL)的pylab介面,其設計與MATLAB非常類似--儘管並不怎麼好用。SciPy就是用matplotlib進行圖形繪製。

 

二、應用A

1. 介紹:對python123作業的成績通過畫圖顯示

2. 代碼實現:

 1 # -*- coding:utf-8 -*-
 2 ''' 成績雷達圖 '''
 3 import numpy as np
 4 import matplotlib.pyplot as plt
 5 plt.rcParams['font.family'] = 'SimHei'        # 設置字體
 6 plt.rcParams['font.sans-serif'] = ['SimHei']  # 設置字體
 7 
 8 labels = np.array(['第一周','第二周','第三周','第四周','第五周','第六周']) # 設置標簽
 9 datas = np.array([8, 10, 9, 10, 11, 7])       # 設置數據
10 angles = np.linspace(0, 2*np.pi, 6, endpoint = False) # 設置角度
11 datas = np.concatenate((datas, [datas[0]]))
12 angles = np.concatenate((angles, [angles[0]]))
13 fig = plt.figure(facecolor = 'white')         # 創建繪圖區域
14 plt.subplot(111, polar = True)                # 極坐標
15 plt.plot(angles, datas, 'bo-', color = 'g', linewidth = 1) # 畫圖
16 plt.fill(angles, datas, facecolor = 'g', alpha = 0.25)     # 填充
17 plt.thetagrids(angles*180/np.pi, labels)      # 設置極坐標的位置
18 plt.figtext(0.52, 0.95, '04-步平凡', ha = 'center') # 設置標題
19 plt.grid(True)   # 打開網格線
20 plt.show()       # 展示圖片

 

3. 效果展示:

 

三、應用B

1. 介紹:使用numpy和PIL庫實現圖像的手繪效果

2. 代碼實現:

 1 # -*- coding:utf-8 -*-
 2 ''' 手繪圖像效果 '''
 3 import numpy as np
 4 from PIL import Image
 5 vec_el = np.pi/2.2   # 光源的俯視角度,弧度值
 6 vec_az = np.pi/4.    # 光源的方位角度,弧度值
 7 depth = 6.          # 深度權值,值越小背景區域越接近白色,值越大背景區域越接近黑色
 8 im = Image.open('PICTURE\HandMade.jpg').convert('L')     # 打開圖像並轉變為灰度模式
 9 a = np.asarray(im).astype('float')
10 grad = np.gradient(a)              # 取圖像灰度的梯度值
11 grad_x, grad_y = grad              # 分別取圖像的橫縱梯度值
12 grad_x = grad_x * depth / 100.
13 grad_y = grad_y * depth / 100.
14 dx = np.cos(vec_el) * np.cos(vec_az) # 光源對x軸的影響
15 dy = np.cos(vec_el) * np.sin(vec_az) # 光源對y軸的影響
16 dz = np.sin(vec_el)                  # 光源對z軸的影響
17 A = np.sqrt(grad_x**2 + grad_y**2 + 1.)
18 uni_x = grad_x/A
19 uni_y = grad_y/A
20 uni_z = 1./A
21 a2 = 255*(dx * uni_x + dy * uni_y + dz * uni_z) # 光源歸一化
22 a2 = a2.clip(0, 255)                 # 預防溢出
23 im2 = Image.fromarray(a2.astype('uint8'))       # 重構圖像
24 im2.save('HandMade_.jpg') # 保存圖像
25 im2.show()                # 顯示圖像

 

3. 效果展示:

                                           原圖                                                                              效果圖

 

四、應用C

1. 簡介:用numpy和matplotlib展現數學模型 —— 正態分佈

2. 代碼實現:

 1 # -*- coding:utf-8 -*-
 2 ''' 正態分佈 '''
 3 import numpy as np
 4 import matplotlib.mlab as mlab
 5 import matplotlib.pyplot as plt
 6 
 7 dx = 100           # 正態分佈的均值
 8 sigma = 15         # 標準差
 9 x = dx + sigma * np.random.randn(10000)  # 在均值周圍產生符合正態分佈的x值
10 
11 num_bins = 50
12 n, bins, patches = plt.hist(x, num_bins, normed=1, facecolor='green', alpha=0.5)
13 # 直方圖函數,x為x軸的值,normed=1表示為概率密度,即和為一,綠色方塊,色深參數0.5.返回n個概率,直方塊左邊線的x值,及各個方塊對象
14 y = mlab.normpdf(bins, dx, sigma)        # 畫一條逼近的曲線
15 plt.plot(bins, y, 'r--')
16 plt.xlabel('Smarts')                     # x軸標簽
17 plt.ylabel('Probability')                # y軸標簽
18 plt.title(r'Histogram of IQ: $\mu=100$, $\sigma=15$') # 中文標題
19 
20 plt.subplots_adjust(left=0.15)           # 左邊距
21 plt.grid(True)      # 打開網格線
22 plt.show()          # 顯示圖片

 

3. 效果展示:

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Escape: 複製代碼 代碼如下: public static string Escape(string str) { StringBuilder sb = new StringBuilder(); foreach (char c in str) { sb.Append((Char.IsLette ...
  • 項目需求(Winform)可以批量列印某個模板,經過百度和摸索,使用iTextSharp+ZXing.Net+FreeSpire.PDF三個類庫實現了生成pdf、生成條形碼和列印pdf功能。 首先在項目作用使用NuGet獲取這三個類庫的引用。 其次把C:\Windows\Fonts裡面的微軟雅黑字體 ...
  • 近期一直在學習Asp.net Core,微軟的文檔太難看,都是英文翻譯過來的,很不友好,感謝這個博客,從壹開始前後端分離【 .NET Core2.0 +Vue2.0 】,讓我入門了,剛學到這個Swagger時,我就有個需求,因為我之前寫過的系統是分了不同的模塊,模塊裡面再分控制器,不同模塊經常會有相 ...
  • 在用C#調用介面的時候,遇到需要通過調用登錄介面才能調用其他的介面,因為在其他的介面需要在登錄的狀態下保存Cookie值才能有許可權調用, 所以首先需要通過調用登錄介面來保存cookie值,再進行其他介面的調用 1.通過Get方式 但是並不是所有的get請求都需要添加這個heard的內容,有些加了這個 ...
  • 關鍵詞:互聯網、關係型資料庫 強調互聯網,這是因為本文所討論的前提是互聯網應用。與“傳統”應用不同,互聯網中的應用每天面臨的是海量的數據、大量的請求以及對系統可靠性和響應速度有著更高的要求。“傳統”應用,我姑且淺顯地認為是,數據量不大,面對的用戶群範圍相對較小,自然大量的高併發請求場景幾乎不存在。 ...
  • 一、 TFTP協議介紹 TFTP(Trivial File Transfer Protocol,簡單文件傳輸協議) 是TCP/IP協議族中的一個用來在客戶端與伺服器之間進行簡單文件傳輸的協議 特點: 簡單 占用資源小 適合傳遞小文件 適合在區域網進行傳遞 埠號為69 基於UDP實現 二、TFTP下 ...
  • #!usr/bin/env python # -*- coding: utf-8 -*- # Author:Sun Xiaolin import sys judgement = sys.argv[1] #[]內寫的值表示取第幾個 # print(judgement) if judgement == ... ...
  • C語言的課後習題 求數列:2/1,3/2,5/3,8/5,13/8,21/13,...前50項的和 數列規律: 第二項的分母是【前一項分子】 第二項的分子是【前一項分子與分母的和】 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...