科學計算和可視化

来源:https://www.cnblogs.com/sun0618-/archive/2019/04/20/10742303.html
-Advertisement-
Play Games

一、numpy和matplotlib庫的學習筆記 (1)numpy庫 1,從數值範圍創建數組 1 numpy.arange(start, stop, step, dtype)#參數分別為起始值,終止值,步長和數據類型 2.創建等間隔一位數組 1 np.linspace(start, stop, nu ...


一、numpy和matplotlib庫的學習筆記

(1)numpy庫

1,從數值範圍創建數組

 1 numpy.arange(start, stop, step, dtype)#參數分別為起始值,終止值,步長和數據類型 

 

2.創建等間隔一位數組

 1 np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)#參數分別為起始值,終止值,數據數,是否包含stop值,是否顯示間距和數據類型 

 

3.使用數字 0 將一個全為 1 的 5x5 二維數組包圍

 1 Z = np.ones((5,5)) 2 Z = np.pad(Z, pad_width=1, mode='constant', constant_values=0) 

 

4.創建一個 5x5 的二維數組,並設置值 1, 2, 3, 4 落在其對角線下方Z = np.diag(1+np.arange(4),k=-1)

 

5.創建一個 10x10 的二維數組,並使得 1 和 0 沿對角線間隔放置

1 Z = np.zeros((10,10),dtype=int)

2 Z[1::2,::2] = 1

3 Z[::2,1::2] = 1 

 

6.創建一個 0-10 的一維數組,並將 (1, 9] 之間的數全部反轉成負數

1 Z = np.arange(11)

2 Z[(1 < Z) & (Z <= 9)] *= -1  

 

7.找出兩個一維數組中相同的元素

1 Z1 = np.random.randint(0,10,10)
2 Z2 = np.random.randint(0,10,10)
3 print("Z1:", Z1)
4 print("Z2:", Z2)
5 np.intersect1d(Z1,Z2)

 

8.返回每行,列最大值

1 np.argmax(a, axis=0) #行最小值是argmin函數

2 np.max(a, axis=0) #列最大值 

 

9..使用 NumPy 列印昨天、今天、明天的日期

1 yesterday = np.datetime64('today', 'D') - np.timedelta64(1, 'D')
2 today     = np.datetime64('today', 'D')
3 tomorrow  = np.datetime64('today', 'D') + np.timedelta64(1, 'D')
4 print("yesterday: ", yesterday)
5 print("today: ", today)
6 print("tomorrow: ", tomorrow)

 

 

10.幾個常用的函數

 1 flat #返回
 2 
 3 np.nonzero([1,0,2,0,1,0,4,0])#返回一維數組中非 0 元素的位置索引
 4 
 5 np.dot(A, B)#矩陣相乘
 6 
 7 np.power(x,4)#對x數組的每個值4次方
 8 
 9 np.set_printoptions(precision=2)#對於二維隨機數組中各元素,保留其 2 位小數
10 
11 Z/1e3#科學記數法輸出 NumPy(Z) 數組
12 
13 a.argsort()#列印各元素在數組中升序排列的索引
14 
15 a.real #屬性,數組a的實部
16 a.imag #屬性,數組a的虛部
17 
18 numpy.linalg.inv()# 函數計算矩陣的乘法逆矩陣。
19 
20 numpy.linalg.solve() #函數給出了矩陣形式的線性方程的解。
21 
22 umpy.matlib.eye() #函數返回一個矩陣,對角線元素為 1,其他位置為零。
23 
24 np.c_[M1, M2]#按列連接兩個數組
25 np.r_[M1, M2]#按行連接兩個數組

 

 

(2)matplotlib庫

Python 中可以用 matplotlib 庫實現數據的可視化,以下是 matpltlib 庫的一些介紹:

1、 matplotlib.pyplot 模塊可以畫折線圖,分為兩個步驟,分別是 pyplot.plot() 和 pyplot.show() ,前者負責畫圖,後者將畫好的圖展示出來。

2、 pyplot.plot( Series1 , Series2 ) 以 Series1 作為橫坐標, Series2 作為縱坐標畫出折線圖;

3、 在執行 2 中的函數後,可以使用 pyplot.xticks( rotation = 45 ) 將 x 軸的坐標顯示逆時針旋轉 45 ° ,預設為 0 °,也就是水平的,同理,可以用 pyplot.yticks( rotation = 45 ) 對 y 軸坐標做同樣的操作。

4、 可以使用 pyplot.xlabel( str ) 將 x 軸命名為 str 的值,同理可以用 pyplot.ylabel( str ) 將 y 軸命名為 str 的值。

5、 可以使用 pyplot.title( str ) 為畫出的折線圖命名。

6、 fig = pyplot.figure() 指出預設畫圖區間。

7、 fig.add_subplot( 3 , 2 , 1 ) 在畫圖區間中添加子圖,位置為,將畫圖區間分為三行兩列的六塊中的第一塊,這裡數的順序為,從左往右,從上到下,按照此邏輯, ( 3 , 2 , 1 ) 所在的位置為第一行最左邊, ( 3 , 2 , 3 ) 的位置為第二行左邊,( 3 , 2 , 6 ) 的位置為第三行最右邊。

8、pyplot.figure( figsize = ( 3 , 6 ) )

  指定畫圖的區域為 長為 3 , 寬為 6 的大小。

9、 pyplot.plot( x , y , c =  'red' , label = ' 250 ' ) 

  c 指定這一條線為紅色,這裡可以用顏色的英文名,也可以用顏色代號,那個 #  什麼的;

  label 指定這條線的名字為 250.

10、 pyplot.legend( loc = 'best' )

  將所有線的名字與線的對照框放到最適合的位置, loc 還可以設置為別的參數。

11、 ax = pyplot.subplots()

  構建一個 pyplot 的子圖對象。

12、 ax.bar( list1 , list2 , 0.5 )

  list1 為條形圖各個條距離遠點的長度, list2 為條形圖中條的高度, 0.5 為條的寬度,通過這三個數據確定圖形的形狀。

13、 ax.set_xticks( list ) 

  設置 X 軸的坐標長度和標號,對於 y 軸也有對應函數實現此功能。

14、 ax.set_xticklabels( list ) 

  設置 x 軸的坐標名,對於 y 軸也有對應函數實現此功能。

15、ax.set_xlabel( str )

  設置 x 軸的名稱,對於 y 軸也有對應函數實現此功能。

16、 ax.set_title( str ) 

  設置圖標的名稱。

17、 ax.barh( list1 , list2 , 0.5 )

  畫水平的柱形圖,其他函數一樣, x 、 y 軸做對應轉換。

18、 ax.scatter( list1 , list2 )

  畫散點圖。

19、 ax.hist( array , range ,bins )

  畫柱形圖, array 中的數值作為橫軸的值,縱軸計算數值出現的次數, range 表示數值顯示的範圍, bins 表示總的顯示柱的個數(控制間距)。

20、 ax.set_ylim( 0 , 50 )

  設置縱軸的顯示範圍為 0 到 50 。

21、  ax.boxplot( Series )

   畫箱線圖(還沒搞明白箱線圖是個什麼玩意兒)。

22、 ax.boxplot( Series[ list ].value )

  畫 好幾個箱線圖。

23、 ax.tick_params( bottom = False , top = False , left = False , right = False )

  設置圖形框四邊,是否顯示刻度。

24、 

for key,spine in ax.spines.items():
    spine.set_visible(False)

  隱藏圖形框的四條邊框線。

25、 pyplot.legend() 

只對上一個畫出的圖有效,所以如果每個子圖都要這個的話,就得在畫下一個之前調用。

 

分類變數繪圖

 1 import matplotlib.pyplot as plt
 2 names = ['group_a', 'group_b', 'group_c']
 3 values = [1, 10, 100]
 4 
 5 plt.figure(1, figsize=(9, 3))
 6 
 7 plt.subplot(131)
 8 plt.bar(names, values)
 9 plt.subplot(132)
10 plt.scatter(names, values)
11 plt.subplot(133)
12 plt.plot(names, values)
13 plt.suptitle('Categorical Plotting')
14 plt.show()

 

 

  

 

 

 二、雷達圖

Python123作業的成績

 1 #-*- coding:utf-8 -*-
 2 '''
 3 Author: 一枚小可愛
 4 Mail:[email protected]
 5 
 6 '''
 7 import numpy as np
 8 import matplotlib.pyplot as plt
 9 
10 #標簽
11 labels = np.array(['第一周','第二周','第三周','第四周','第五周','第六周'])
12 #數據個數
13 dataLenth = 6
14 #數據
15 data = np.array([5.0,9.1,9.8,9.0,9.7,8.8])
16         
17 angles = np.linspace(0, 2*np.pi, dataLenth, endpoint=False)
18 data = np.concatenate((data, [data[0]])) # 閉合 # #將數據結合起來
19 angles = np.concatenate((angles, [angles[0]])) # 閉合
20 
21 fig = plt.figure()
22 ax = fig.add_subplot(121, polar=True)# polar參數!!代表畫圓形!!!!
23 #111代表總行數總列數位置
24 ax.plot(angles, data, 'bo-', linewidth=1)# 畫線四個參數為x,y,標記和顏色,閑的寬度
25 ax.fill(angles, data, facecolor='r', alpha=0.1)# 填充顏色和透明度
26 ax.set_thetagrids(angles * 180/np.pi, labels, fontproperties="SimHei")
27 ax.set_title("一枚小可愛的成績表\n2018310143108", va='baseline', fontproperties="SimHei")
28 
29 ax.set_rlim(0,10)
30 ax.grid(True)
31 plt.show()

 

 

顯示如下:

 

 

三、自定義手繪風

 1 from PIL import Image
 2 #image 是 PIL庫中代表一個圖像的類
 3 import numpy as np
 4 
 5 #打開一張圖片 “F:\PycharmProjects\cui.jpg” 是圖片位置
 6 a = np.asarray(Image.open('D:\\我的文件\\Python\\壁紙4.jpg')
 7                .convert('L')).astype('float')
 8 
 9 
10 depth = 10.                    #浮點數,預設深度值為10
11 grad = np.gradient(a)          #取圖像灰度的梯度值
12 grad_x,grad_y = grad           #分別取橫縱圖像的梯度值
13 grad_x = grad_x*depth/100.     #根據深度調整 x 和 y 方向的梯度值
14 grad_y = grad_y*depth/100.
15 A = np.sqrt(grad_x**2 + grad_y**2 +1.)      #構造x和y軸梯度的三維歸一化單位坐標系
16 uni_x = grad_x/A
17 uni_y = grad_y/A
18 uni_z = 1./A
19 
20 vec_el = np.pi/2.2                       #光源的俯視角度,弧度值
21 vec_az = np.pi/4.                        #光源的方位角度,弧度值
22 dx = np.cos(vec_el)*np.cos(vec_az)       #光源對 x 軸的影響,np.cos(vec_el)為單位光線在地平面上的投影長度
23 dy = np.cos(vec_el)*np.sin(vec_az)       #光源對 y 軸的影響
24 dz = np.sin(vec_el)                      #光源對 z 軸的影響
25 
26 b = 255*(dx*uni_x + dy*uni_y + dz*uni_z)    #梯度與光源相互作用,將梯度轉化為灰度
27 b = b.clip(0,255)                          #為避免數據越界,將生成的灰度值裁剪至0‐255區間
28 
29 im = Image.fromarray(b.astype('uint8'))     #重構圖像
30 im.save("D:\\我的文件\\Python\\壁紙9.jpg")      #保存圖片的地址

 

 

前後對比:

   

 

四、數學規律

    題目:|x| + |y| = 1

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 
 4 x = np.arange(-1.1, 1.1, .01)
 5 y = np.arange(-1.1, 1.1, .01)
 6 x, y = np.meshgrid(x, y)
 7 
 8 f = np.abs(x) + np.abs(y) - 1
 9 plt.figure()
10 plt.contour(x, y, f, 0,)
11 plt.title(r'$\left|x\right|+\left|y\right|=1$')
12 plt.show()

 

 

圖如下:
  

 


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

-Advertisement-
Play Games
更多相關文章
  • 參考鏈接: https://blog.csdn.net/czyt1988/article/details/52121360 http://blog.sina.com.cn/s/blog_a6fb6cc90101gv2p.html 1. QAxObject介紹 在QT中,有個自帶的QAxObject類 ...
  • ___setattr__魔方方法一定要註意防止無限遞歸當在此方法內部給屬性賦值的時候,那會調用此方法,又會重新賦值,無限重覆最後要歸於super是種解決方法。或者用dict方法。 1 class Recangle: 2 def __init__(self,width = 0,heigh = 0): ...
  • 在python3中爬蟲常用基本庫為urllib以及requests 本文主要描述urllib的相關內容 urllib包含四個模塊:requests——模擬發送請求 error——異常處理模塊 parse——關於URL處理方法的工具模塊 robotparser——通過識別網站robot.txt判斷網站 ...
  • 這裡 sqlproxy起到一個代理的作用,使用時無需關註 mysql和oracle的實現 ...
  • 什麼是優先順序隊列? 怎麼實現一個優先順序隊列? PriorityQueue是線程安全的嗎? PriorityQueue就有序的嗎? ...
  • 此程式在Windows10 CodeBlocks17.12環境下測試運行,其他編程環境未經測試! 作業需求↓↓↓↓↓↓ 運行效果圖如下 (codeblocks下載地址http://www.codeblocks.org/downloads/binaries) C++代碼 2019-04-20-20:3 ...
  • 2.1 變數是程式的基本組成單位 舉一個簡單的例子 2.2 變數的介紹 2.2.1 概念 變數相當於記憶體中一個數據存儲空間的表示,可以把變數看作是一個房間的門牌號,通過門牌號我們可以找到對應的房間,而通過變數名可以訪問到變數(值)。 2.2.2 變數使用的基本步驟 1) 聲明/定義變數(Scala要 ...
  • String:是對象不是原始類型. 為不可變對象,一旦被創建,就不能修改它的值. 對於已經存在的String對象的修改都是重新創建一個新的對象,然後把新的值保存進去. String 是final類, 不能被繼承. StringBuffer: 是一個可變對象,當對他進行修改的時候不會像String那樣 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...