python科學計算_numpy_函數庫

來源:互聯網
上載者:User

標籤:

1.常規函數與排序

常用統計函數:

求和:sum()、均值:mean()、標準差:std()、方差:var()、最小值:min()、最大值:max()、最大值與最小值之差:ptp()、最大值的下標:argmax()、最小值的下標:argmin()、中值:median()

上述函數都可以指定axis,來沿著某一軸操作;除了mean()函數求均值,還可以使用average(),並且可以指定weights參數來指定權值,計算加權平均;argmax()和argmin()如果不指定axis參數,則返回平坦化後的下標;

排序函數:sort()、argsort();數組的sort()方法會對數組本身進行改變,而sort()函數則不會;sort預設axis=-1,即沿著最後一個軸進行排序;sort()函數返回一個新的排序後的數組而argsort()則返回排序後的下標數組,如:

import numpy as np
a = np.random.randint(0,10,size=(4,5))

array([[8, 2, 0, 3, 7],
[7, 0, 2, 7, 4],
[1, 8, 1, 1, 2],
[4, 6, 2, 1, 4]])

a.sort() ? #此時a數組會改變為排序後的數組;

a1 = np.sort(a) ? #此時a數組不變,得到的a1數組為:

array([[0, 2, 3, 7, 8],
[0, 2, 4, 7, 7],
[1, 1, 1, 2, 8],
[1, 2, 4, 4, 6]])

# 即沿著-1軸排序後的結果

idx = np.argsort(a)?

idx

array([[2, 1, 3, 4, 0],
[1, 2, 4, 0, 3],
[0, 2, 3, 4, 1],
[3, 2, 0, 4, 1]])

此時,雖然idx.shape = (4,5),但是並不能直接使用a[idx]得到排序後的數組,因為idx是數組,所以numpy會在後面補:,等效於:a[idx,:],idx數組中的每個值訪問a數組的0軸,當idx中的值超過a的0軸長度之後就會產生錯誤:IndexError: index 4 is out of bounds for axis 0 with size 4;所以使用idx來訪問a得到排序後的數組,需要產生0軸的下標,通過np.ogrid對象可以產生:

x,_ =?np.ogrid[:a.shape[0],:a.shape[1]]

右邊的運算式產生a數組的grid,即各個軸的下標數組,取第一個元素即得到a數組的0軸下標數組:

array([[0],
[1],
[2],
[3]])

通過a[x,idx]可以正確訪問到排序後的數組

2. 多項式函數

多項式函數是只包含加法和乘法,對一個變數的各次冪進行加法和乘法操作的函數:

f(x) = a[n]*x^n + a[n-1]*x^(n-1) + … + a[2]*x^2 + a[1]*x + a[0]

numpy中通過將變數x的各次冪(從高到底的順序)係數即可表示一個多項式函數:

a = np.array([1.0,0,-2,1])

p = np.poly1d(a)

p是一個poly1d對象,此對象可以像函數一樣調用,並且返回多項式的值,並且是一個ufunc對象,即可以以數組作為參數,得到相應的多項式值的數組;

poly1d對象可以進行四則運算,分別對應於多項式的四則運算,除法運算時,會返回包含兩個值的元組,其中第一個值為商多項式(商式),第二個值為餘數多項式(餘式);

poly1d對象可以進行積分:deriv()和微分:integ()操作,得到新的多項式;

使用np.roots()函數,可以對多項式進行求根:

r = np.roots(p)

array([-1.61803399, ?1. ? ? ? ?, ?0.61803399])

使用np.poly()函數,可以將根轉回多項式的係數:

np.poly(r)

array([ 1.00000000e+00, -1.22124533e-15, -2.00000000e+00,
1.00000000e+00])

使用np.polyfit()函數,可以對一組資料進行多項式擬合:

import matplotlib.pyplot as plt
plt.figure(figsize=(8,4))
for deg in [3,5,7]:
? ? a = np.polyfit(x,y,deg)
? ? error = np.abs(np.polyval(a,x)-y)
? ? plt.plot(error)
plt.ylim(0,0.0001)
plt.show()

?

3.分段函數

通過三個函數實現分段操作:where()、select()、piecewise()

where(condition,x,y)函數類似於三目操作符,當condition為真時,返回x,否則返回y;如果x和y的形狀不一致,則通過廣播統一形狀;

當分段的數量比較多時,where()函數寫起來就比較複雜,select(condlist, choicelist)函數,通過一個長度為N的布爾數組列表,choicelist則是一個長度為N的儲存候選值的數組列表,其中所有數組長度為M;

condlist可以形象地理解為多個分段的條件,N為分段的數量;choicelist則是每種條件下的取值,用if-elif-else表現為:

if condlist[0] :
? ? choicelist[0]
elif condlist[1]:
? ? choicelist[1]
elif condlist[2]:
? ? choicelist[2]

等;

piecewise(x, condlist, funclist)函數是為了避免當分段比較多時,需要用很多的數組來儲存分段結構,piecewise()函數可以直接通過分段列表計算出結果,而不需要中間的分段數組;和select()參數不同的是,funclist是一個函數列表,分別對應condlist中的條件執行;

4.統計函數

unique()函數返回參數數組中所有不同的值,並按照從小到大排序,相當於linux中的sort -u 命令;該函數有兩個選擇性參數:

return_index: True 表示同時返回原始數組的下標;

return_inverse :True 表示同時返回重建原始數組用的下標數組;

bincount()函數統計整數數組中各個元素出現的次數(參數數組中所有的元素必須為非負數),返回數組中的第i個元素表示整數i在參數數組中出現的個數。

histogram(a, bins=10, range=None, normed=False, weights=None)函數對一維數組進行長條圖統計;該函數返回兩個一維數組:hist和bin_edges;

histogram2d()、histogramdd()對二維數組和n維數組進行長條圖統計

?


??

python科學計算_numpy_函數庫

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.