關於python科學計算庫numpy學習總結
本文中部分print輸出可能會報錯,原因為python3的print通過函式方式使用,與python2中的print通過解釋執行不同,需要使用print()進行控制檯列印
安裝numpy
python3 -m pip install -U pip更新pip
pip install numpy
安裝方式II
pip install ipython
ipython –pylab
pylab模式下會自動匯入SciPy,NumPy,Matplotlib模組
引入numpy
import numpy as py
使用numpy
arange()函式用於建立同類型多維陣列(homogeneous multidimensional array)
用arange建立的陣列使用type()檢視型別為ndarray
reshape()函式用於重新構造陣列成為其他維度陣列
例如:np.arange(20).reshape(4,5)
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
arrry陣列相關屬性:
ndim:維度
shape:各維度大小
size:元素個數
dtype:元素型別
dsize:元素佔位大小
生成特殊矩陣
全零矩陣:np.zeros()
注意:ones()和zeros()函式的第一個引數是一個指向數列的指標,不能直接是一個數列,例如上圖報錯情況
全一矩陣:np.ones(d,dtype=int)
預設生成浮點型,可通過第二個引數指定元素資料型別
隨機數陣列
np.random.rand(5)生成包含5個[0,1)區間的數的陣列
陣列計算
a = np.array([1.0, 2],[2, 4])
a
[[ 1. 2.]
[ 2. 4.]]
由於陣列是【同質】的,python會自動將整型轉換為浮點型
- np.exp(a):自然常數e(約等於2.7)的a次方
- np.sqrt(a):a的開方
- np.square(a):a的平方
np.power(a,3):a的3次方
a.sum():所有元素之和
- a.max():最大元素
- a.min():最小元素
- a.max(axis=1):每行最大
- a.min(axis=0):每列最小
陣列與矩陣(matrix)
注意:
- 矩陣是二維陣列,矩陣乘法相求左側矩陣列數等於右側矩陣行數
- 陣列可以是任意正整數維數,乘法要求兩側陣列行列數均相同
相互轉換
陣列轉矩陣
np.asmatrix(a)
np.mat(a)
直接生成
np.matrix(‘1.0 2.0;3.0 4.0’)
生成指定長度的一維陣列
np.linspace(0,2,9):生成從0開始,到2結束,包含9個元素的等差數列
**陣列元素訪問
a = np.array([3.2, 1.5],[2.5, 4])
print a[0][1]
1.5
print a[0,1]
1.5
注意:
若b=a是將b和a同時指向同一個array,若修改a或者b的某個元素,a和b都會改變
若想a和b不會關聯修改,則需要b = a.copy()為b單獨生成一份拷貝
a:
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
a[: , [1,3]]:訪問a的所有行的2、4列
**訪問符合條件的元素
a[: , 2][a[: , 0] > 5]
解釋:
a [x] [y]表示訪問符合x、y條件的a的元素,[: , 2]表示取所有行的第3列,[a[: , 0] > 5]表示取第一列大於5的行(即第3、4行),最終即表示取第3、4行的第3列,即得結果array([12, 17])這個“子”陣列
numpy.where()查詢符合條件的位置
例如:loc = np.where(a == 11)
print loc
(array([2]), array([1]))
結果是一個表示座標的元組,元組第一個陣列表示查詢結果的行座標,第二個陣列表示結果的列座標
print a[loc[0][0], loc[1][0]]
11
上式為通過位置反求元素11
注意:where求出的結果為元組,不能通過loc[x,y]的方式獲取元素(該獲取方式為陣列的方式,因為元組沒有索引),只能通過loc[x][y]的方式獲取
陣列其他操作
矩陣轉置
a = np.random.rand(2,4)
a = np.transpose(a)將a陣列轉置
b = np.random.rand(2,4)
b = np.mat(b)
print b.T 轉置矩陣
矩陣求逆
import numpy.linalg as nlg
a = np.random.rand(2,2)
a = np.mat(a)
ia = nlg.inv(a) 得逆矩陣
print a * ia
[[ 1. 0.]
[ 0. 1.]]
特徵值和特徵向量
a = np.random.rand(3,3)
eig_value, eig_vector = nlg.eig(a)
拼接矩陣(使用場景:迴圈處理某些資料後的操作)
按列拼接兩個向量成一個矩陣
vstack
hstack
例項:
a = np.random.rand(2,2)
b = np.random.rand(2,2)
c = np.hstack([a,b]) 水平拼接
d = np.vstack([a,b]) 垂直拼接
缺失值
nan作為缺失值的記錄
通過isnan判定
a = np.random.rand(2,2)
a[0, 1] = np.nan
print (np.isnan(a))
nan_to_num可用來將nan替換成0
pandas提供能指定nan替換值的函式
print(np.nan_to_num(a))
[[ 0.54266589 0. ]
[ 0.92468339 0.70599254]]
Sheppard K. Introduction to Python for econometrics, statistics and data analysis. Self-published, University of Oxford, version, 2012, 2.
附:Cheat Sheet of NumPy&SciPy&Pandas