Python科學計算


一、函數庫

  • 線性代數使用LAPACK庫
  • 快速傅立葉變換使用FFTPACK庫
  • 常微分方程求解使用ODEPACK庫
  • 非線性方程組求解以及最小值求解等使用MINPACK庫

二、Numpy   

  1、創建數組

import numpy as np

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

  結果:

  

  很顯然,這種方法效率並不高,所以Numpy提供了很多專門用來創建數組的函數,例如:

  • arange()類似於內置函數range(),通過設置開始值、終值和步長創建表示等差數列的一維數組,但是得到的結果並不包含終值,示例如下:
    c = np.arange(1, 10, 1)  # 結果:[1 2 3 4 5 6 7 8 9]
  • lispance()通過指定開始值、終值和元素個數創建表示等差數列的一維數組,可以通過endpoint參數指定是否包含終值,默認為True,即包含終值。示例如下:
  • d = np.linspace(1, 10, 10) # 結果:[  1.   2.   3.   4.   5.   6.   7.   8.   9.  10.]
    e = np.linspace(1, 10, 10, endpoint=False) # 結果:[ 1.   1.9  2.8  3.7  4.6  5.5  6.4  7.3  8.2  9.1]

    logspace()和linspace()類似,不過它創建的數組是等比數列。開始值0表示10^2,終值2表示10^2,步長5表示有5個數值,基數可以通過base參數設置,默認值為10, 創建一個2^1/5的等比數組。 示例如下:

  • f = np.logspace(0, 2, 5) # 結果:[   1.            3.16227766   10.           31.6227766   100.        ]
    g = np.logspace(0, 2, 5, base=2, endpoint=False) # 結果:[ 1.          1.31950791  1.74110113  2.29739671  3.03143313]

    zeros()、ones()、empty()可以創建指定形狀和類型的數組。其中:empty()僅僅分配數組所使用的內存,不對數組元素進行初始化操作,因此它的運行速度是最快的。              zeros()將數組元素初始化為0。    

h = np.empty((2, 3), np.int) # 結果:[[ 1 0 506081024][        0         0         0]]    只分配內存,不對其進行初始化  
i = np.zeros(4, np.float) # 結果:[ 0.  0.  0.  0.]

  2、存取元素

  • 一維數組可以使用和列表相同的方式對數組的元素進行存取
b = a[5] # 用整數作為下標可以獲取數組中的某個元素
c = a[3:5] # 用切片作為下標可以獲取數組的一部分,包括a[3]但不包括a[5]
d = a[:5] # 切片中省略開始下標,表示從a[0]開始
e = a[:-1] # 下標可以使用負數,表示從數組最后往前數
a[2:4] = 101, 102 # 下標可以用來修改元素的值
f = a[1:-1:2] # 切片中的第三個參數表示步長
g = a[::-1] # 省略切片開始的下標和結束的下標,步長為-1,表示整個數組頭尾顛倒
h = a[5:1:-2] # 步長為負數時,開始下標必須大於結束下標
  • 多維數組的創建與存取
b = np.arange(0, 60, 10).reshape(-1, 1) + np.arange(0, 6)

    結果為:

[[ 0  1  2  3  4  5]
 [10 11 12 13 14 15]
 [20 21 22 23 24 25]
 [30 31 32 33 34 35]
 [40 41 42 43 44 45]
 [50 51 52 53 54 55]]
c = b[0, 3:5] # 取第0行第3列和第4列的數

d = b[4:, 4:] # 取第4行到最后一行的第4列到最后一列的數

e = b[:, 2] # 取所有行的第2列的數

f = b[2::2, ::2] # 取第2行到最后一行,第一列到最后一列的步長為2的數

g = b[(0, 1, 2, 3), (1, 2, 3, 4)] # 取第0行的第1個數,第1行的第2個數,第2行的第3個數,第3行的第4個數

h = b[3:, [0, 2, 5]] # 取第3行之后的所有列中的第0列,第2列,第5列的數

mask = np.array([1, 0, 1, 0, 0, 1], dtype=np.bool) # bool類型的1代表取這行,0代表不取這行
i = b[mask, 2] # 取第0行,第2行,第5行的第2列的數 

mask = np.array([1, 0, 1, 0, 0, 1]) 
j = b[mask, 2] # 取第1行,第0行,第1行,第0行,第0行,第1行的第二列的數

mask = [True, False, True, False, False, True]
k =b[mask, 2] # 取第1行,第0行,第1行,第0行,第0行,第1行的第二列的數

l = b[[1, 2]] # 與a[[1,2], :]相同,取第1行和第2行的所有數據

   3、龐大的函數庫

    求和

      sum()計算數組元素之和,也可以對列表、元組等和數組類似的序列進行求和。當數組為多維時,它計算數組中所有元素的和。

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

    平均值

      mean用於求數組的平均值

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

    方差

      var()用於求數組的方差

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

    標准差

      std()用於求數組的標准差 

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

    最值

      用min()和max()計算數組的最小值和最大值,ptp()計算最大值和最小值之間的差,argmin()和argmax()計算最小值和最大值的下標

a = [[1,2,3,4],[5,6,7,8],[3,4,2,7],[3,6,2,9]]
np.min(a)
np.max(a)
np.ptp(a)
np.argmin(a)
np.argmax(a)

    排序

      數組的sort()方法用於對數組進行排序

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

    中值

      用median()可以獲得數組的中值  

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

三、scipy統計-stats

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM