Python數據分析之Numpy庫(筆記)

2.1 ndarray多維數組
2.1.1 創建ndarray數組
通過NumPy庫的array函數,即可輕鬆地創建ndarray數組。NumPy庫能將數據(列表,元組,數組,或其他序列類型)轉換爲ndarray數組
第一步先要引入NumPy庫:import numpy as np
array函數 語法;np.array(data)
參數說明:data爲需要轉換爲ndarray數組的序列
通常來說,ndarray是一個通用的同結構數據容器,即其中的所有元素都需要是相同的類型,當創建好一個ndarray數組時,同時會在內存中儲存ndarray的shape和dtype
shape:ndarry維度大小的元組
dtype:解釋說明ndarray數據類型的對象
NumPy庫還有一些函數可以創建特殊的數組
arange 類似於內置的range函數,用於創建數組
ones 創建指定長度或形狀的全1數組
ones_like 以另一個數組爲參考,根據其形狀和dtype創建全1數組
zeros,zeros_like 同上,創建沒有具體值的數
eye,identity 創建正方形的N*N單位矩陣

2.1.2 ndarray對象屬性
.ndim 即數據軸的個數
.shape 數組的維度
.size 元素的個數
.dtype 數據類型
.itemsize 數組中每個元素的字節大小

2.1.3 nadarry數據類型
浮點數(float),整形(int),複數(complex),布爾值(bool),字符串(string_),Python對象(object)
astype方法進行數據類型的轉換
語法:arr.astype(np.float64|'float64')

2.1.4 數組轉換
1.數組重塑
reshape方法改變其數據維度
語法:arr.reshape((x,y))
x:行
y:列,可以設置爲-1,表示數組的維度可以通過數據本身來推斷
數據散開(ravel)或扁平化(flatten)
語法:arr.ravel() 語法:arr.flatten()
說明:arr:ndarray數組 說明:arr:ndarray數組
2.數組合並
conzatenate方法通過指定軸方向,將多個數組合併在一起
注意:軸用來爲超過一維的數組定義的屬性,二維數組擁有兩個軸:第0軸(axis=0)沿着行的垂直往下,第1軸(axis=1)沿着列的方向水平延伸
語法:np.concatenate([arr1,arr2],axis=0|1) axis:指定軸
vstack和hstsck方法也可以進行數組合並
語法:np.vstack((arr1,arr2)) 語法:np.hstack((arr1,arr2))
3.數組拆分
split方法可以將數組拆分爲多個數組
語法:np.split(arr,indices_or_sections,axis=0)
arr 要切分的數組
indices_or_sections 如果是一個整數,就用該數平均切分,如果是一個數組,爲沿軸切分的位置(左開右閉)
axis 沿着哪個維度進行切向,默認爲0,橫向切分。爲1時,縱向切分
4.數組置換和軸對換
轉置是數組重塑的一種特殊形式,可以通過transpose方法進行轉置
transpose方法需要傳入軸編號組成的元組,這樣就完成了數組的轉置
數組的T屬性,也可用於數組的轉置
swapaxes方法用於軸對換

2.1.5 NumPy的隨機數函數
rand 產生均勻分佈的樣本值
randint 給定範圍內取隨機整數
randn 產生正態分佈的樣本值
seed 隨機數種子
permutation 對一個序列隨機排序,不改變原數組
shuffle 對一個序列隨機排序,改變原數組
uniform(low,high,size) 產生具有均勻分佈的數組,low表示起始值,high表示結束值,size表示形狀
normal(loc,scale,size) 產生具有正態分佈的數組,loc表示均值,scale表示標準差
poisson(lam,size) 產生具有泊松分佈的數組,lam表示隨機事件發生率

2.2 數組的索引和切片
2.2.1 數組的索引
一維數組的索引類似於Python列表
數組的切片返回的是原始數組的視圖。簡單地說,視圖就是原始數組的表現形式,切片操作並不會產生新數據,這就意味着在視圖上的操作都會使原數組發生改變。
如果需要的並非視圖而是要複製數據,則可以通過copy方法來實現
在高維數組中,如果省略後面的索引,則會返回低一個維度的數組
2.2.2 數組的切片
一維數組的切片同樣類似於Python列表
多維數組的切片是按照軸方向進行的,當在中括號中輸入一個參數時,數組就會按照0軸(也就是第一 軸)方向進行切片
python numpy數組中冒號的使用:
python中冒號實際上有兩個意思: 1.默認全部選擇; 2.指定範圍(注意這裏含左不含右)
2.2.3 布爾型索引
注意:布爾型數組長度必須和被索引的長度一致
2.2.4 花式索引
花式索引是NumPy中的術語,它可以通過整數列表或數組進行索引
也可以使用np.ix_函數完成同樣的操作

2.3 數組的運算
2.3.1 數組和標量間的運算
數組之所以很強大而且重要的原因,是其不需要通過循環就可以完成批量計算,也就是矢量化。相同維度的數組的算術運算都可以直接應用到元素中,也就是元素級運算。
2.3.2 通用函數
通用函數是一種對數組中的數組執行元素級運算的函數
一元函數:函數傳入一個數組
abs函數求絕對值
square函數求平方
二元函數:有一些函數需要傳入兩個數組並返回一個數組
add函數用於兩個數相加
minimum函數可以計算元素最小值
有些通用函數還可以返回兩個數組,例如modf函數可以返回數組元素的小數和整數部分
2.3.3 條件邏輯運算
如果需要通過cond的值來選取arr1和arr2的值,當cond爲True時,選擇arr1的值,否則選擇arr2的值,可以通過if語句判斷來實現
if方法存在的兩個問題:第一,對大規模數組處理速度不是很快;第二,無法用於多維數組 where函數可以解決這兩個問題
where函數:where(condition,x,y) 滿足條件(conditin),輸出x,不滿足輸出y
2.3.4 統計運算
NumPy庫支持對整個數組或指定軸向的數據進行統計計算
sum函數用於求和
mean函數用於求算術平均數
std,var函數用於求標準差和方差
min,max函數求最小值和最大值
argmin,argmax函數求最小和最大元素索引
cumsum函數求所有元素的累計和
cumpord函數求所有元素的累計積
2.3.5 布爾型數組運算
對於布爾型數組,其布爾值會被強制轉換爲1(Ture)和0(False)
any和all也可以用於布爾型數組運算
any函數用於測試數組中是否存在一個或多個Ture
all函數用於檢查數組中的所有值是否爲Ture
2.3.6 排序
與Python列表相似,NumPy數組也可以通過sort方法進行排序
sort函數進行排序(從小到大) 對於多維度數組,可以通過指定軸方向進行排序
2.3.7 集合運算
NumPy庫中提供了針對一維數組的基本集合運算。在數據分析中,常使用np.unique方法來找出數組中的唯一值
注意:對唯一-值進行了排序
unique(x)唯一值
intersectld(x,y)公共元素
unionld(x,y)並集
setdiffd(x,y)集合的差
setxorld(x,y)交集取反
2.3.8 線性代數
數組的運算是元素級的,數組相乘的結果是各對應元素的積組成的數組。而對於矩陣而言,需要求的是點積,這裏NumPy提供了用於矩陣乘法的dot函數。
點積:在數學中,又稱數量積(dot product; scalar product),是指接受在實數R上的兩個向量並返回一個實數值標量的二元運算。它是歐幾里得空間的標準內積
dot函數矩陣乘法

2.4 數組的存取
2.4.1數組的存儲
通過np.savetxt方法可以對數組進行存儲
np.savetxt(fname, X, fmt= *%.18e',delimiter=' ,newline="\n',header=", footer=", comments='# ' encoding=None)

2.4.2數組的讀取
對於存儲的文件,可以通過np.loadtxt方法進行讀取,並將其加載到一個數組中
np.loadtxt(fname, dtype= <class'float'>, comments='#',delimiter=None, converters=None, skiprows=0, usecols =None,unpack=False, ndmin=0, encoding='bytes')

拓展文件存儲方法:

2.5 綜合實例
2.5.1 圖像轉換
圖像一般採用的是RGB色彩模式,即每個像素點的顏色有R (紅)、G(綠)、B(藍)組成。通過三種顏色的疊加可以得到各種顏色,每個顏色的取值範圍爲0~255。Python中的PIL庫是一 個處理圖像的第三方庫

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