Python數據分析Numpy庫常用函數詳解,提到循環就該想到的庫
Python進行數據分析的核心庫肯定是Pandas,該庫差不多可以解決結構化數據的絕大部分處理需求。在《Python數據分析常用函數及參數詳解,可以留著以備不時之需 》一文中也已經對該庫的常用函數進行了詳細介紹。
但是Pandas是構建在Numpy的基礎之上的,它的矢量化運算功能在處理數組和矩陣上具有著非常大的優勢。雖然普通的數據分析任務可能很少用到Numpy庫,但一旦你具有循環需求或是要處理數值型數據時,你應該首先想到該庫。
本文整理了該庫的一些常用函數和基礎知識,整理不易,希望覺得還不錯的朋友可以不吝給個贊。
基礎介紹
在介紹函數之前先介紹下Numpy庫的基本情況,該庫最重要的特點就是其ndarray對象,這個對象可以理解成線性代數里面的數組,每個數組有維度和類型等屬性。
維度
直觀地判斷數組對象有幾個維度可通過判斷其包含在幾層[]中,一層[]即為一維。其中,一維數組可看成是向量,二維數組可看成是有行和列的數據,三維數組可看成是有頁,且每頁中有行和列的數據,至于更高維度就只能意會了。
類型
數組并不是只能存數值型數據,是也可以存字符串的,但它要求元素類型必須一致,不一致時會按照str > float > int的優先級進行類型轉變。例如,在一個整數數組中插入字符串,就會將全部元素轉成字符串類型。
另外說一下廣播機制。通俗地理解廣播機制就是當對不同形狀的數組進行算術運算時,廣播機制會自動將兩個數組補全為相同形狀的數組。但需要具備以下前提條件之一:兩個數組維度數不等時,二者從末尾開始算起的維度的軸長度相等;兩個數組維度數相等時,其中一方的有一個維度的長度為1。關于這一點的理解最好是多加練習。
Numpy常用函數分類
為了更好地理解該庫的函數,本文將常用的函數按照下面方式進行分類。

其中基礎函數包含對象創建、屬性查看、切片索引、形狀變換等小類;random模塊就是一些常用的隨機函數;char模塊主要是用來處理字符數組類,也就是數組元素是字符串類型的數據;Matlib是Numpy中的矩陣庫,矩陣其實是一種特殊的數組,但它必須是二維的;linglg庫是屬于線性代數的函數庫。
后三個庫的函數一般常用于科學計算和圖像識別等領域,在數據分析中幾乎用不上,因此本文不做介紹,但大家應該知道有這兩個庫,便于有需求時知道Numpy也具備相應的功能。
基礎函數
以下均用arr表示數組,np表示numpy庫
(1)對象創建
- array(object, dtype =None,order =None, ndmin =0)
- #order為創建方式,C為行方向,F為列方向,默認為C,ndmin指定生成數組的最小維度
- arange(start=0,stop=4,step=,dtype=)
- #生成一維數組,不包含stop
- linspace(start=,stop=,num=,endpoint=True)
- #生成一維等差數據,endpoint決定是否包含stop值,默認包含
- asarray(object,dtype=None,order=None)
- #將對象轉換為數組
- zeros(shape,dtype=float,order='C')
- #生成元素全為0的數組
- ones(shape,dtype=float,order='C')
- #生成元素全為1的數組
- eye(N,dtype=float,order='C')
- #生成對角線元素為1,其余元素為0的N階矩陣
(2)屬性查看
- arr.shape
- #數組的形狀
- arr.ndim
- #數組的維度
- arr.size
- #數組的長度
- arr.dtype
- #數組數據類型
(3)切片索引
- arr[i]
- #取i行
- arr[[i,j]]
- #取i,j行
- arr[:,i:j]
- #取i到j-1列
- arr[::-1,::-1]
- #元素反轉
- np.where(condition,x,y)
- #condition為真的數組中數據賦值x,否則為y
(4)形狀變換
- arr.reshape(newshape,order=None)
- #newshape為新維度,元組格式
- arr.flatten(order='C')
- #將數組平鋪為一維數組,order表示按行還是按列,默認按行
- arr.T
- #數組轉置
- arr.transpose()
- #數組轉置
- np.append(arr,values,axis=None)
- #axis控制返回什么類型,默認返回的是拼接后的一維數組
- np.concatenate((arr1,arr2,arr3),axis=0)
- #可拼接多個數組
(5)統計函數
- arr.sum(axis = None)
- #axis為整數或者元組
- arr.mean(axis = None)
- #計算平均值
- arr.std(axis = None)
- #計算標準差
- arr.var(axis = None)
- #計算方差
- np.average(arr,axis =None, weights =None)
- #計算數組的加權平均值,weights中為權重
- np.median(arr,axis=None)
- # 計算數組中元素的中位數
- arr.argmin(axis=None)
- ##返回數組最小值的位置
- arr.argmax(a)
- #返回數組最大值的位置
- np.dot(arr1,arr2)
- #數組的點積運算
random庫
隨機函數在生成練習數據等方面是非常有幫助的,可以重點掌握一下。
- np.random.rand(d0,d1,d2,……)
- #返回輸入維度的隨機數,隨機數服從[0, 1)區間的均勻分布
- np.random.randn(d0,d1,d2,……)
- #返回輸入維度的標準正態分布隨機數
- np.random.normal(loc=0.0,scale=1.0,size=None)
- #返回輸入維度的正態分布隨機數,可控制正態分布的期望和方差
- np.random.randint(low=,high=,size=None,dtype='l')
- #返回屬于[low,high)區間的隨機整數,size可為元組
- np.random.seed(s)
- #隨機數種子,可保證兩次隨機數生成的結果一樣