numpy.meshgrid()理解


本文的目的是記錄meshgrid()的理解過程:

step1. 通過一個示例引入創建網格點矩陣;

step2. 基於步驟1,說明meshgrid()的作用;

step3. 詳細解讀meshgrid()的官網定義;

說明:step1和2 的數據都是基於笛卡爾坐標系的矩陣,目的是為了方便討論。

 

step1. 通過一個示例引入創建網格點矩陣;

示例1,創建一個2行3列的網格點矩陣。

 1 #!/usr/bin/env python3
 2 #-*- coding:utf-8 -*-
 3 ############################
 4 #File Name: meshgrid1.py
 5 #Brief:
 6 #Author: frank
 7 #Mail: frank0903@aliyun.com
 8 #Created Time:2018-06-14 21:33:14
 9 ############################
10 import numpy as np
11 import matplotlib.pyplot as plt
12 
13 X = np.array([[0, 0.5, 1],[0, 0.5, 1]])
14 print("X的維度:{},shape:{}".format(X.ndim, X.shape))
15 Y = np.array([[0, 0, 0],[1, 1, 1]])
16 print("Y的維度:{},shape:{}".format(Y.ndim, Y.shape))
17 
18 plt.plot(X, Y, 'o--')
19 plt.grid(True)
20 plt.show()

X矩陣是:[[0. 0.5 1. ], [0. 0.5 1. ]]

Y矩陣是:[[0 0 0],[1 1 1]]

 

step2. meshgrid()的作用;

當要描繪的 矩陣網格點的數據量小的時候,可以用上述方法構造網格點坐標數據;
但是如果是一個(256, 100)的整數矩陣網格,要怎樣構造數據呢?
方法1:將x軸上的100個整數點組成的行向量,重復256次,構成shape(256,100)的X矩陣;將y軸上的256個整數點組成列向量,重復100次構成shape(256,100)的Y矩陣
顯然方法1的數據構造過程很繁瑣,也不方便調用,那么有沒有更好的辦法呢?of course!!!
那么meshgrid()就顯示出它的作用了
使用meshgrid方法,你只需要構造一個表示x軸上的坐標的向量和一個表示y軸上的坐標的向量;然后作為參數給到meshgrid(),該函數就會返回相應維度的兩個矩陣;
例如,你想構造一個2行3列的矩陣網格點,那么x生成一個shape(3,)的向量,y生成一個shape(2,)的向量,將x,y傳入meshgrid(),最后返回的X,Y矩陣的shape(2,3)

 

示例2,使用meshgrid()生成step1中的網格點矩陣

 1 x = np.array([0, 0.5, 1])
 2 y = np.array([0,1])
 3 
 4 xv,yv = np.meshgrid(x, y)
 5 print("xv的維度:{},shape:{}".format(xv.ndim, xv.shape))
 6 print("yv的維度:{},shape:{}".format(yv.ndim, yv.shape))
 7 
 8 plt.plot(xv, yv, 'o--')
 9 plt.grid(True)
10 plt.show()

示例3,生成一個20行30列的網格點矩陣

 1 x = np.linspace(0,500,30)
 2 print("x的維度:{},shape:{}".format(x.ndim, x.shape))
 3 print(x)
 4 y = np.linspace(0,500,20)
 5 print("y的維度:{},shape:{}".format(y.ndim, y.shape))
 6 print(y)
 7 
 8 xv,yv = np.meshgrid(x, y)
 9 print("xv的維度:{},shape:{}".format(xv.ndim, xv.shape))
10 print("yv的維度:{},shape:{}".format(yv.ndim, yv.shape))
11 
12 plt.plot(xv, yv, '.')
13 plt.grid(True)
14 plt.show()

 

 step3. 詳細解讀meshgrid()的官網定義;

numpy.meshgrid(*xi, **kwargs)
Return coordinate matrices from coordinate vectors.
根據輸入的坐標向量生成對應的坐標矩陣

Parameters:
  x1, x2,…, xn : array_like
    1-D arrays representing the coordinates of a grid.
  indexing : {‘xy’, ‘ij’}, optional
    Cartesian (‘xy’, default) or matrix (‘ij’) indexing of output. See Notes for more details.
  sparse : bool, optional
    If True a sparse grid is returned in order to conserve memory. Default is False.
  copy : bool, optional
    If False, a view into the original arrays are returned in order to conserve memory.
    Default is True. Please note that sparse=False, copy=False will likely return non-contiguous arrays.
    Furthermore, more than one element of a broadcast array may refer to a single memory location.
    If you need to write to the arrays, make copies first.
Returns:
  X1, X2,…, XN : ndarray
    For vectors x1, x2,…, ‘xn’ with lengths Ni=len(xi) ,
    return (N1, N2, N3,...Nn) shaped arrays if indexing=’ij’
    or (N2, N1, N3,...Nn) shaped arrays if indexing=’xy’
    with the elements of xi repeated to fill the matrix along the first dimension for x1, the second for x2 and so on.

 

 針對indexing參數的說明:

indexing只是影響meshgrid()函數返回的矩陣的表示形式,但並不影響坐標點

 1 x = np.array([0, 0.5, 1])
 2 y = np.array([0,1])
 3 
 4 xv,yv = np.meshgrid(x, y)
 5 print("xv的維度:{},shape:{}".format(xv.ndim, xv.shape))
 6 print("yv的維度:{},shape:{}".format(yv.ndim, yv.shape))
 7 print(xv)
 8 print(yv)
 9 
10 plt.plot(xv, yv, 'o--')
11 plt.grid(True)
12 plt.show()

 

 1 x = np.array([0, 0.5, 1])
 2 y = np.array([0,1])
 3 
 4 xv,yv = np.meshgrid(x, y,indexing='ij')
 5 print("xv的維度:{},shape:{}".format(xv.ndim, xv.shape))
 6 print("yv的維度:{},shape:{}".format(yv.ndim, yv.shape))
 7 print(xv)
 8 print(yv)
 9 
10 plt.plot(xv, yv, 'o--')
11 plt.grid(True)
12 plt.show()

 

 


免責聲明!

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



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