關於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]]

更多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

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章