1. 程式人生 > >Python Numpy 100題實驗(九):幾種標準化演算法實現

Python Numpy 100題實驗(九):幾種標準化演算法實現

單獨把這幾道題目拿出來,歸為一類吧,都是標準化演算法。 本講的主要內容:

  • Z-Score標準化演算法
  • Min-Max標準化演算法
  • 應用L2正規化標準化資料

使用Z-Score標準化演算法對資料進行標準化處理

首先給出Z-Score標準化公式: Z=Xmean(X)sd(X) Z=\frac{X-mean(X)}{sd(X)}

其實知道了公式就好算了,只是對之前的一些計算進行了一個綜合

def zscore(a,axis=None):
    amean = np.mean(a, axis=axis,keepdims=True )
    astd = np.std(a, axis=axis, keepdims=True)
    return (a - amean)/astd

a = np.random.randint(1, 10, 10)
print(zscore(a))

輸出:

[-0.55418416  1.07576925  0.74977857  1.07576925  0.42378789  1.40175994
 -0.55418416 -1.20616553 -1.20616553 -1.20616553]

使用Min-Max 標準化演算法對資料進行標準化處理

公式: Y=Zmin(Z)max(Z)min(Z) Y = \frac{Z-min(Z)}{max(Z) - min(Z)}

還是一樣

def minmax(a, axis=None):
    a_min = np.min(a, axis=axis, keepdims=True)
    a_max = np.max(a, axis=axis, keepdims=True)
    return (a - a_min)/(a_max - a_min)

a = np.random.randint(1, 10, (3,3))
print(minmax(a))

輸出:

[[0.57142857 0.42857143 1.        ]
 [0.28571429 0.28571429 0.42857143]
 [1.         1.         0.        ]]

使用L2範數對資料進行標準化處理

L2範數的計算公式: L2=x12+x22+...+xi2 L_{2} = \sqrt{x_{1}^{2} + x_{2}^{2}+...+x_{i}^{2}} 根據計算公式寫出函式:

def l2_normalize(v, axis=-1, order=2):
    l2 = np.linalg.norm(v, ord=order, axis=axis, keepdims=True)
    l2[l2==0] = 1
    return v/l2

z = np.random.randint(1, 10, (3,3))
print(l2_normalize(z))

輸出:

[[0.11547005 0.80829038 0.57735027]
 [0.88345221 0.33129458 0.33129458]
 [0.64465837 0.24174689 0.72524067]]

使用Numpy將實驗室LOGO轉化所謂Ndarray陣列

這是最後一個實驗了,實驗樓這一波廣告。。猝不及防。。

直接附上參考答案好了:

from io import BytesIO
from PIL import Image
import PIL, requests

# 通過連結下載影象
URL = 'https://static.shiyanlou.com/img/logo-black.png'
response = requests.get(URL)

# 將內容讀取為影象
I = Image.open(BytesIO(response.content))

# 將影象轉換為 Ndarray
shiyanlou = np.asarray(I)
shiyanlou

Numpy100題的實驗終於整理完了耶!

完結撒花!

以上~