np.meshgrid() 生成網格坐標函數,主要用於可視化決策邊界


numpy.meshgrid()

生成網格點坐標矩陣

[X,Y] = meshgrid(x,y) 將向量x和y定義的區域轉換成矩陣X和Y,其中矩陣X的行向量是向量x的簡單復制,而矩陣Y的列向量是向量y的簡單復制(注:下面代碼中X和Y均是數組,在文中統一稱為矩陣了)

假設x是長度為m的向量,y是長度為n的向量,則最終生成的矩陣X和Y的維度都是 nm (注意不是mn)。

至於為什么(其中矩陣X的行向量是向量x的簡單復制,而矩陣Y的列向量是向量y的簡單復制),看下面的圖片

 我們注意到網格坐標矩陣,其實有大量的重復——XXX的每一行都一樣,YYY的每一列都一樣

代碼:

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
m, n = (5, 3)
x = np.linspace(0, 1, m) #array([0. , 0.25, 0.5 , 0.75, 1. ]) y = np.linspace(0, 1, n) #array([0. , 0.5, 1. ])
X, Y = np.meshgrid(x,y) '''
X:
   array([[0.  , 0.25, 0.5 , 0.75, 1.  ],
       [0.  , 0.25, 0.5 , 0.75, 1.  ],
       [0.  , 0.25, 0.5 , 0.75, 1.  ]]) 
    
Y:
    array([[0. , 0. , 0. , 0. , 0. ],
       [0.5, 0.5, 0.5, 0.5, 0.5],
       [1. , 1. , 1. , 1. , 1. ]])
'''

X.shape  #(3, 5)
Y.shape  #(3, 5)

 可以這樣理解,x是長度為m的向量,y是長度為n的向量,那么x要復制n-1行一樣的x,y首先要轉置,然后再補m-1列同樣的yT

matplotlib中進行可視化,來查看函數運行后得到的網格化數據的結果

plt.plot(X, Y, marker='.', color='blue', linestyle='none')
plt.show()

說了這么多,這個網格坐標主要應用於等高線的繪制和機器學習中超平面的繪制

例子:

x_fearures = np.array([[-1, -2], [-2, -1], [-3, -2], [1, 3], [2, 1], [3, 2]])
y_label = np.array([0, 0, 0, 1, 1, 1])

## 調用邏輯回歸模型
lr_clf = LogisticRegression()

## 用邏輯回歸模型擬合構造的數據集
lr_clf = lr_clf.fit(x_fearures, y_label) #其擬合方程為 y=w0+w1*x1+w2*x2

# 可視化決策邊界
plt.figure()
plt.scatter(x_fearures[:,0],x_fearures[:,1], c=y_label, s=50, cmap='viridis')
plt.title('Dataset')

nx, ny = 200, 100
x_min, x_max = plt.xlim()  #返回x軸的范圍
y_min, y_max = plt.ylim()  #返回y軸的范圍
x_grid, y_grid = np.meshgrid(np.linspace(x_min, x_max, nx),np.linspace(y_min, y_max, ny))

z_proba = lr_clf.predict_proba(np.c_[x_grid.ravel(), y_grid.ravel()])
z_proba = z_proba[:, 1].reshape(x_grid.shape)
plt.contour(x_grid, y_grid, z_proba, [0.5], linewidths=2., colors='blue')

plt.show()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM