學員筆記|Python數據分析之numpy入門(三)

寫在最前:在前兩篇筆記中,記錄了ndarray的創建,讀取與維度的轉換。本篇筆記中,我將記錄ndarray最重要的功能,運算。

筆記來源視頻:julyedu.com/video/play/

首先,我們創建兩個矩陣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. 相等
  2. 其中一個為1

以下情況會 進行廣播:

寫在最後:本節記錄了褚老師numpy課程中的ndarray對象的運算,矩陣乘法,轉置,排序與廣播演算法。比前兩篇內容多,小夥伴們需要更多的練習,才能理解。下一篇將介紹 ndarray對象的高級處理,就將結束對Numpy的探索了。


推薦閱讀:

用人工智慧來續寫《權力的遊戲》,靠譜嗎?
人工智慧是什麼?
人工智慧的交易系統具體是什麼樣的理念,或者模式?
理解機器學習中的 L2 正則化
如何判斷兩段文本說的是「同一件事情」?

TAG:numpy | Python | 人工智能算法 |