1. 程式人生 > >關於python科學計算庫numpy學習總結

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

這裡寫圖片描述