Python数据分析之初识numpy常见方法使用案例
生活随笔
收集整理的這篇文章主要介紹了
Python数据分析之初识numpy常见方法使用案例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
聲明與簡介
numpy是python數據科學計算的基礎包,這個包有多維數據對象ndarray,以及諸多它的派生對象(如:掩碼數組、矩陣),同時這些對象還提供了數學,邏輯,形狀處理,排序,選擇,離散傅立葉變換,基本線性代數,基本統計運算,隨機模擬等常見的科學計算方法。
創建ndarray
直接創建ndarray
#通過np.array直接創建ndarray數組。 import numpy as np arr1=np.array([4,6,9]) print(type(arr1[2],arr1) #不難看出這里元素的類型是int <class 'numpy.int32'> [4 6 9]類型轉換
#1 ndarry里定義的數據類型一般都是統一的,如果不統一,在類型可以轉換的情況下,可自動進行轉換。比如int轉float import numpy as np arr1=np.array([4.32,6,9]) print(type(arr1[2],arr1) #不難看出這里元素的類型轉換成了float <class 'numpy.float64'> [4.32 6. 9. ]# 2 float轉str import numpy as np arr1=np.array([4.32,'we',9]) print(type(arr1[2],arr1) #結果 <class 'numpy.str_'>通過模板創建
元素都是0
#可以通過np.zeros和np.ones初始化ndarray,指定大小和類型。 #創建一個有3個元素都為0的一維ndarray。 arr1=np.zeros(3,dtype=float)元素都是1
#創建一個3行4列、元素全是1的數組。 arr1=np.ones((3,4),dtype=int)特定元素
# 創建一個2行3列、元素全是5.12的數組。 arr1=np.full((2,3),5.12)等差數組步長法
可以通過numpy的arange方法進行初始化生成等差ndarray,指定起始值、結尾值、步長(增幅)。 比如生成個以1為起始,每次遞增3并以20為最終值的等差數組。注意:這里達不到20。 print(np.arange(1,20,3)) #結果為: [ 1 4 7 10 13 16 19]#當然,這里增幅可以是負的,即 print(np.arange(20,1,-3)) #結果為 [20 17 14 11 8 5]等分數組平均法
#可以通過起始值和份數來等差劃分數組,比如生成3個等差元素從3到15。 print(np.linspace(3,15,3)) #結果,計算方法 (15-3)/3,所以步長為6。 [ 3. 9. 15.]均勻分布隨機數
#通過np.random模塊可以生成隨機數,這里是調用其random方法生成均勻的隨機數。 均勻分布即指定區間內的點都有相同的概率被取到。 比如:生成2×2的數組,其元素為0到1之間均勻隨機數。 print(np.random.random((2,2))) #結果 [[0.15185125 0.52790783] [0.16011147 0.29797948]]正態分布隨機數
#通過np.random模塊可以生成隨機數,這里是調用其normal方法生成正太分布的隨機數。 其中標準正態分布是均值的0、標準差是1。 print(np.random.normal(0,1,(2,2))) #結果 [[-0.25384836 -2.06285573] [-2.27651345 0.90667998]]隨機整數
# 1通過np.random模塊可以生成隨機數,這里是調用其randint方法生成指定類型的隨機數。 #生成2到20之間的6個隨機數 print(np.random.randint(2,20,6)) #結果,當然也可以指定其它shape的數組。 [ 9 3 12 11 10 12]生成主對角線數組
通過np.eye可以生成對角線數組(矩陣)。 print(np.eye(4)) #結果 [[1. 0. 0. 0.][0. 1. 0. 0.][0. 0. 1. 0.][0. 0. 0. 1.]]數據類型
數據類型詳解
注:查看某個類型的范圍(含最小、大值),可以通過numpy內置的方法,比如查看float16的最大值,可以: print(np.finfo(np.float16)) #結果 Machine parameters for float16 --------------------------------------------------------------- precision = 3 resolution = 1.00040e-03 machep = -10 eps = 9.76562e-04 negep = -11 epsneg = 4.88281e-04 minexp = -14 tiny = 6.10352e-05 maxexp = 16 max = 6.55040e+04 nexp = 5 min = -max不過針對float16,我們最大只能定義到65519.0,但輸出值為65500.0,而定義為65520.0時則顯示為inf(即無限大整數的意思)。ndarray的基礎方法
維度ndim
維度類似我們在空間里看東西的視角,常見的有1維直線、2維平面、3維立體、更高維等。np里應用ndim方法來查看維度。
print(np.random.randint(1,20,(2,4,5)).ndim) #結果為,即該數組為3維。 3 #按照長乘寬乘高更好理解些。形狀shape
形狀shape是每個形狀的大小,返回的是一個元組,這里顯然是(2,4,5),一般我們說成是2×4×5的數組。
print(np.random.randint(1,20,(2,4,5)).shape) #結果 (2, 4, 5)大小size
大小統計的是整個數組里的元素個數,這里我們不難知道上述數組總共有2*4*5=40個元素。
print(np.random.randint(1,20,(2,4,5)).size) #結果 40數據類型dtype
數據類型是當前數組里元素的類型,如int、float。
print(np.random.randint(1,20,(2,4,5)).dtype) #結果 int32訪問數組元素
# 1 可以通過數組索引(中括號下標的方式)訪問元素。比如訪問第1維、第2維、第3維交叉的元素,則可以通過如下方式訪問。注意數組索引從0開始。 arr4=np.random.randint(1,20,(2,4,5)) print(arr4,arr4[0][1][2]) #或者 print(arr4,arr4[0,1,2]) #結果,有隨機性。 15# 2 通過想反向取,可以使用索引值:-1、-2…。比如要取元素8,則反向對應的索引值為-2。 print(np.array([2,8,9])[-2]) #結果 8普通數組切片
可以訪問數組時指定索引范圍來訪問,即切片形式。 #1 比如訪問某1維數組的前4個元素,注意因為python遵循左閉右開,所以最右邊的值取不到。即取的索引為0、1、2、3,不包含4。 print(np.array([2,8,9,10,23,27])[:4]) #結果 [ 2 8 9 10]#2 比如訪問某1維數組的第2到第4個元素。原理同上。 print(np.array([2,8,9,10,23,27])[2:4]) #結果 [ 9 10]#3 索引從某個位置到最后 print(np.array([2,8,9,10,23,27])[4:]) #結果 [23 27]#4 從后往前取,比如-3到-1,這里也是左閉右開,即-1取不到。 print(np.array([2,8,9,10,23,27])[-3:-1]) #結果 [10 23]跳躍式數組切片
#1 索引隔位取,比如從0開始每隔2個索引號取一個元素 print(np.array([2,8,9,10,23,27])[::2]) #結果 [ 2 9 23]#2 索引隔位指定起始索引位置取,比如索引從3開始每隔2個索引號取一個元素。 print(np.array([2,8,9,10,23,27])[3::2]) #結果 [ 2 9 23]#3 元素逆轉,即輸出數組和原數組元素是逆向的。 print(np.array([2,8,9,10,23,27])[::-1]) #結果 [27 23 10 9 8 2]#4 指定索引值逆轉元素,即輸出數組是原數組元素從指定索引位置逆序。元素個數是指定的值+1。比如這里輸出數組應該是4+1=5個元素。 print(np.array([2,8,9,10,23,27])[4::-1]) #結果 [23 10 9 8 2]注:高維數據的數據切片類似。形狀轉換
這里是通過調用reshape方法將數組進行形狀的轉換。比如將一個1維數組轉換為2為的,2×3的數組。 print(np.array([2,8,9,10,23,27]).reshape(2,3)) #結果 [[ 2 8 9] [10 23 27]]合并
# 1 同維度數組合并,np的concatenate可以合并,合并之后不改變原來的維度。 x=np.array([1,2,3,4]) y=np.array([6,7,8]) print(np.concatenate([x,y])) #結果 [1 2 3 4 6 7 8] 注:可以合并多個數組,不一定是2個。#2 不同維度的合并(一般差一個維度)合并時需要指定方向,比如是按列(用np.vstack)、行(np.hstack)這里vstack的v對應單詞vertical即垂直(保持列方向一致) hstack的h對應單詞horizontal即水平(保持行方向一致) #2.1 vstack 垂直方向合并 x=np.array([1,2,3]) y=np.array([[6,7,8],[9,5,10]]) print(np.vstack([x,y]))#結果,這里可見列數是對應相等的,即都是3個。 [[ 1 2 3] [ 6 7 8] [ 9 5 10]]#2.2 hstack 水平方向合并 x=np.array([[1,2,3],[4,5,6]]) y=np.array([[6,7,8],[9,5,10]]) print(np.hstack([x,y]))#2.2 dstack合并生成新的維 x=np.array([[1,2,3],[3,2,1]]) y=np.array([[6,7,8],[9,5,10]]) print(np.dstack([x,y])) #結果 [[[ 1 6][ 2 7][ 3 8]][[ 3 9][ 2 5][ 1 10]]]拆分
拆分和合并是相反的操作。 # 1 指定拆分的中間區段,剩下的取區段的頭和尾。 x=np.array([1,2,3,4,5,6]) x1,x2,x3=np.split(x,[2,5]) print (x1,x2,x3)#2 vsplit垂直切分,保持列數不變。這里的拆分的數N比子數組少1,即子數組為N+1。 x=np.array([[1,2,3,4],[5,6,7,8]]) x1,x2=np.vsplit(x,[1]) print (x1,x2) #結果 [[1 2 3 4]] [[5 6 7 8]]#3 hsplit垂直切分,保持列數不變。這里的拆分參數N指的是索引位置。會分為2部分。 x=np.array([[1,2,3,4],[5,6,7,8]]) x1,x2,x3=np.hsplit(x,[3]) print (x1,x2,x3) #結果 [[1 2 3] [5 6 7]] [[4] [8]]#4 hsplit垂直切分,保持列數不變。這里的拆分參數可以是個區段,則會分3部分。 x=np.array([[1,2,3,4],[5,6,7,8]]) x1,x2,x3=np.hsplit(x,[2,3]) print (x1,x2,x3) #結果 [[1 2][5 6]] [[3] [7]] [[4] [8]]總結
以上是生活随笔為你收集整理的Python数据分析之初识numpy常见方法使用案例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 车摆件的胶怎么处理?
- 下一篇: 线性代数行列式计算之升阶法