學員筆記|Python數據分析之numpy入門(三)
寫在最前:在前兩篇筆記中,記錄了ndarray的創建,讀取與維度的轉換。本篇筆記中,我將記錄ndarray最重要的功能,運算。
筆記來源視頻:http://www.julyedu.com/video/play/65/599
首先,我們創建兩個矩陣x與y
import numpy as np
x=np.array([[1,2],[3,4]],dtype=np.float64)
y=np.array([[5,6],[7,8]],dtype=np.float64)
x,y
#x,y為兩個shape均為(2,2)的矩陣
逐元素運算
numpy ufunc運算
ufunc是universal function的縮寫,它是一種能對數組的每個元素進行操作的函數。numPy內置的許多ufunc函數都在C語言級別實現的,因此它們的計算速度非常快。以下講到的add,subtract等都是numpy提供的ufunc函數。
逐元素運算:就是兩個shap一致的矩陣,相同位置上的元素的運算。
求和
我們可以像在python里進行數值運算一樣 ,直接運行:x+y
該圖用顏色標識出了,逐元素求和的過程。這個很容易理解。
也可以使用np.add()函數,傳入x,y後得到求和結果。
求差
與求和類似,兩個矩陣直接減,或使用np.subtract()函數
乘與除
乘法:x*y或者np.multiply(x,y)
除法:x/y或者np.divide(x,y)
Matrix Multiplication
Numpy可以輕鬆進行矩陣的乘法,矩陣的乘積使用dot函數進行計算。而對於一維數組,它計算的是其點積。
向量的內積inner product
即9*10+10*11,最後的結果是200
也可以這樣來寫np.dot(v,w)
#說明,一維的vector轉置後還是自己,上一篇筆記中也提到過這個問題。
矩陣乘積
x=np.array([[1,2],[3,4]])
y=np.array([[5,6],[7,8]])
print(x,y)
x.dot(y)#或者是np.dot(x,y),np.matmul(x,y)
dot與matmul的區別
#重點:矩陣運算是機器學習中核心的核心,必須多多練習熟悉。
ndarray對象的轉置
np.arange(16).reshape(2,8).shape
這裡先用arange生成了從0到15的一維數組,然後使用reshape,將這個數組的形態改變為有行與列兩個維度了(2行8列)#注意這個形狀的乘積必須和總的元素個數相同,否則將會報錯。
可以把這個數組變更shape為(1,16),這也是有兩個維度,
也可以用reshape轉為(2,2,4),這代表有3個維度,也可以這樣去理解:兩行兩列,每個元素有4個維度來表示。
ndarray對象內部運算
求和sum
其它的運算如np.mean()等運算。
按矩陣的維度進行運算
x=np.array([[1,2],[3,4]])
print(x)
print(----------)
print(axis=0:,np.sum(x,axis=0))
print(axis=1:,np.sum(x,axis=1))
#劃重點:axis=0時指定是第一個維度,在維度數為2的時候(即一個矩陣),第一個維度就是行,第二個維度就是列。將axis設置為0,即表示消除了行個維度,保留列的維度。所以結果是[4,6](褚老師原話是,把第0維壓扁了)。如果axis設置為1,代表消除了列的維度,保留行的維度。
排序
一維數組的排序
使用sort方法可以對元素進行排序。這和python下的排序很像 。
arr=np.random.randn(8)*10
print(arr)
arr.sort()
print(arr)
矩陣的排序
如果ndarray對象的ndim是2(也就是一個矩陣)那麼排序就可以在不同的維度上進行。
arr=np.random.randn(5,3)*10
print(arr)
arr.sort(axis=0)
print(arr)
#sort指定axis=0,即是排序的時候,依據的維度是第一維(即行),於是我們可以觀察到排序後矩陣,在行的方向上,是從小到大的。
axis=1的情況不再演示了,小夥伴們自己試下。
排序小實驗
找出排序後位置處於在5%的數字
large_arr =np.random.randn(1000)
large_arr.sort()
print(Large_arr)
print(large_arr[int(0.05*len(large_arr))])
廣播演算法
當我們使用ufunc函數對兩個數組進行計算時,ufunc函數會對這兩個數組的對應元素進行計算,因此它要求這兩個數組有相同的大小(shape相同)。如果兩個數組的shape不同的話,會進行如下的廣播(broadcasting)處理。
a=np.random.randn(3,5)
a+10
這裡的a的shape為(3,5),第二行和a進行運算的是一標量對象10,這時就會用到廣播演算法。具體步驟是,將10的在第一個維度擴展3次,第二個維度擴展5次。這時兩個對象的shape一致,就可以進行運算了。
什麼時候會進行廣播呢:
當操作兩個array時,numpy會 比較它們的shape,當出現下面兩種情況時,兩array會 兼容和輸出broadcasting結果:
- 相等
- 其中一個為1
以下情況會 進行廣播:
寫在最後:本節記錄了褚老師numpy課程中的ndarray對象的運算,矩陣乘法,轉置,排序與廣播演算法。比前兩篇內容多,小夥伴們需要更多的練習,才能理解。下一篇將介紹 ndarray對象的高級處理,就將結束對Numpy的探索了。
推薦閱讀:
※用人工智慧來續寫《權力的遊戲》,靠譜嗎?
※人工智慧是什麼?
※人工智慧的交易系統具體是什麼樣的理念,或者模式?
※理解機器學習中的 L2 正則化
※如何判斷兩段文本說的是「同一件事情」?