Numpy科學計算從放棄到入門
目錄
- 什麼是Numpy
- 一、如何建立陣列
- 二、如何訪問陣列
- 三、如何做算數運算
- 四、如何使用統計函式
- 五、如何轉置陣列和反轉
- 六、如何去重、計算差集並集等集合操作
- 七、如何生成隨機數
- 八、如何輸入輸出檔案
什麼是Numpy
Numpy是Python科學計算的基礎包,不僅是python中使用最多的第三方庫,還是SciPy、Pandas等資料科學的基礎庫。所提供的結構比Python自身的更高階、更高效。
可以說,Numpy所提供的資料結果是Python資料分析的基礎。
標準的Python用列表list儲存陣列的值,list的元素在系統中記憶體是分散儲存的,而Numpy的陣列結構是儲存在一個均勻連續的記憶體塊中,遍歷所有的元素更高效,節省了計算資源。
主要提供了以下功能:
- 快速高效的多維陣列物件的ndarray
- 用於對陣列執行元素級計算以及直接對陣列執行數學運算的函式
- 用於讀寫硬碟上基於陣列的資料集的工具
- 線性代數運算、傅立葉變換,以及隨機陣列生成
- 用於將C、C++、Fortran程式碼整合到Python的工具
- 作為演算法之間傳遞資料的容器,對於數值型資料,Numpy陣列在儲存和處理資料時要比內建的Python資料結構高效得多
numpy提供了一個ndarray物件,多維陣列的含義,維度稱為rank(秩),每個線性的陣列稱為一個axes(軸)。陣列是有屬性的,可以通過函式shape獲得陣列的大小,通過dtype獲得元素的屬性
相關幫助文件
- 官方文件
- 中文快速入門
- 參考手冊
一、如何建立陣列
- array
將輸入資料(列表、元組、陣列或其他序列型別)轉換為ndarray。要麼推斷出dtype,要麼顯示指定dtype
- asarray
將輸入轉換為ndarray,如果輸入本身就是一個ndarray就不再複製
array和asarray都可以將結構資料轉化為ndarray,但是主要區別就是當資料來源是ndarray時,array仍然會copy出一個副本,佔用新的記憶體,但asarray不會 arange
類似內建的range,返回一個ndarray
linspace
和arrange的作用一樣,只是包含指定的最終值zeros、zeros_like
根據指定的形狀和dtype建立一個全是9的陣列。
zeros_like以另一個數組為引數,並根據其形狀和dtype建立一個全0陣列
ones、ones_like
根據指定的形狀和dtype建立一個全是1的陣列。
ones_like以另一個數組為引數,並根據其形狀和dtype建立一個全1陣列
empty、empty_like
類似ones和ones_like,只是產生的是全0陣列eye、identity
建立一個正方的N*N單位矩陣,對角線為1,其餘為0
二、如何訪問陣列
下標索引
arr2d=np.array([[1,2,3],[4,5,6],[7,8,9]])
arr2d[0][2]和arr2d[0,2]是等價的切片索引
可以一次傳入多個切片,
arr2d[:2, 1:]布林型索引
將data中所有負值都設定為0
data[data < 0] = 0
- 選出所有名字為“cqh”的所有行
data[names == 'cqh']
- 整數索引
利用整數陣列進行索引
arr = np.empty((8,4))
for i in range(8):
arr[i] = i
傳入指定順序
arr[[4,3,0,6]]
* 負數索引
arr[[-3,-5,-7]]
- 方形索引
使用np.ix_方法,可以將兩個一維整數陣列轉換為一個用於選取方形區域的索引
arr = np.arange(32).reshape((8,4))
獲取行[1,5,7,2],列[0,3,1,2],為
arr[np.ix_([1,5,7,2],[0,3,1,2])]
相當於執行了
arr[[1,5,7,2]][:,[0,3,1,2]]
錯誤方法:
arr[[1,5,7,2],[0,3,1,2]]
三、如何做算數運算
x1 = np.arange(1,11,2)
x2 = np.linspace(1,9,5)
np.add(x1, x2)
np.subtract(x1, x2)
np.multiply(x1, x2)
np.divide(x1, x2)
np.power(x1, x2)
np.remainder(x1, x2)
四、如何使用統計函式
預設axis=0代表沿著列統計,axis=1代表沿著行統計
- amax:矩陣中的最大值
- amin:矩陣中的最小值
- ptp:統計最大值與最小值的差
- percentile:統計陣列的百分位數
- median:統計中位數
- mean:平均數
- average:加權平均值(需要傳入各個元素的權重)
- std:標準差
- var:方差
五、如何轉置陣列和反轉
- reshape
arr = np.arange(15).reshape((3,5))
- T
arr.T
六、如何去重、計算差集並集等集合操作
- unique(x):計算x中的唯一元素,並返回有序結果
- intersect1d(x,y):計算x和y中的公共元素,並返回有序結果
- union(x,y):計算x和y的並集,並返回有序結果
- in1d(x,y):得到一個表示“x的元素是否包含在y”的布林型陣列
- setdiff1d(x,y) 集合的差,元素在x中且不在y中
- setxor1d(x,y) 集合的對稱差,存在於一個數組中但不同時存在兩個陣列中的元素
七、如何生成隨機數
rand:產生均勻分佈的樣本值
uniform:產生在[0,1]中均勻分頁的樣本值
randn:產生正態分佈(平均值0,標準差1)的樣本值,類似MATLAB介面
normal:生成標準正態分佈的樣本陣列
randint:在給定的上下限範圍內隨機選取整數
- seed:確定隨機數生成器的種子
- permutation:返回一個序列的隨機排列
- shuffle:對一個序列就地隨機排列
- bionmial:產生二項分佈的樣本值
- beta:生產Beta分佈的樣本值
- chisquare:產生卡方分佈的樣本值
gamma:產生Gamma分佈的樣本值
八、如何輸入輸出檔案
以二進位制格式儲存到磁碟
- np.save:儲存到磁碟
- np.savez:將多個數組儲存到一個壓縮檔案中,載入時得到一個字典物件
- np.load:從磁碟載入
存取文字檔案
- loadtxt:指定各種分隔符
- savetxt:將陣列寫到以某種分隔符隔開的文字檔案