本文中部分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]]
更多Numpy函數見
http://wiki.scipy.org/Numpy_Example_List
http://docs.scipy.org/doc/numpy
參考文獻
https://uqer.io/community/share/54ca15f9f9f06c276f651a56
http://wiki.scipy.org/Tentative_NumPy_Tutorial
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