您好,登錄后才能下訂單哦!
這篇文章主要介紹“np.meshgrid中的indexing參數問題如何解決”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“np.meshgrid中的indexing參數問題如何解決”文章能幫助大家解決問題。
meshgrid函數在二維空間中可以簡單地理解為將x軸與y軸的每個位置的坐標關聯起來形成了一個網格,我們知道空間中的點是由坐標確定的,因此,當x與y關聯起來后,我們便可以給與某個點某個特定值并畫出對應的圖像。具體的可以百度一下,會有很多較為詳細的介紹。
這里我想要著重的說一下二維以及三維的meshgrid
的參數indexing
的問題。
import numpy as np class Debug: def __init__(self): self.x = np.arange(5) self.y = np.arange(5) def grid(self): X, Y = np.meshgrid(self.x, self.y, indexing="xy") return X, Y main = Debug() X, Y = main.grid() print("The X grid is:") print(X) print("The Y grid is:") print(Y) """ The X grid is: [[0 1 2 3 4] [0 1 2 3 4] [0 1 2 3 4] [0 1 2 3 4] [0 1 2 3 4]] The Y grid is: [[0 0 0 0 0] [1 1 1 1 1] [2 2 2 2 2] [3 3 3 3 3] [4 4 4 4 4]] """
從上面的結果可以看出,所獲取的網格對應如下圖所示,橫向為x
軸,縱向為y
軸,類似于我們在幾何空間中使用的坐標系, 我們通常稱之為笛卡爾坐標系(Cartesian coordinate)。在二維meshgrid
網格創建命令中,笛卡爾坐標系是默認的坐標系。
然而在python編程中,還有一種較為常用的indexing
取法,代碼如下:
import numpy as np class Debug: def __init__(self): self.x = np.arange(5) self.y = np.arange(5) def grid(self): X, Y = np.meshgrid(self.x, self.y, indexing="ij") return X, Y main = Debug() i, j = main.grid() print("The i grid is:") print(i) print("The j grid is:") print(j) """ The i grid is: [[0 0 0 0 0] [1 1 1 1 1] [2 2 2 2 2] [3 3 3 3 3] [4 4 4 4 4]] The j grid is: [[0 1 2 3 4] [0 1 2 3 4] [0 1 2 3 4] [0 1 2 3 4] [0 1 2 3 4]] """
此時從上面的結果我們可以看出,所獲取的網格對應如下圖所示,縱向為i
軸,橫向為j
軸,我們在編程中通常很少使用的這種坐標系。但是它也有自己的優勢,這里不進一步說明。
進一步我們討論三維的情況,代碼如下:
import numpy as np class Debug: def __init__(self): self.x = np.arange(3) self.y = np.arange(3) self.z = np.arange(3) def grid(self): X, Y, Z = np.meshgrid(self.x, self.y, self.z) return X, Y, Z main = Debug() X, Y, Z = main.grid() print("The X grid is:") print(X) print("The Y grid is:") print(Y) print("The Z grid is:") print(Z) """ The X grid is: [[[0 0 0] [1 1 1] [2 2 2]] [[0 0 0] [1 1 1] [2 2 2]] [[0 0 0] [1 1 1] [2 2 2]]] The Y grid is: [[[0 0 0] [0 0 0] [0 0 0]] [[1 1 1] [1 1 1] [1 1 1]] [[2 2 2] [2 2 2] [2 2 2]]] The Z grid is: [[[0 1 2] [0 1 2] [0 1 2]] [[0 1 2] [0 1 2] [0 1 2]] [[0 1 2] [0 1 2] [0 1 2]]] """
由上面的結果我們可以看到,此時的坐標軸對應如下圖像:
x
軸向下,y
軸向屏幕內側,z
軸向右側,在三維圖像中不再根據indexing
值來區分坐標軸了,而是統一規定了坐標軸的取法,只有對于這個坐標軸的取法深入理解,才能在之后的三維數據處理中游刃有余。
但是這里有一個問題,來看一組代碼:
class Debug: def __init__(self): x = np.array([[[0], [2]], [[4], [6]], [[8], [10]]]) print(x.shape) main = Debug() """ (3, 2, 1) """
我們可以看到,輸出結果為(3, 2, 1)
,即沿著x
軸1
個元素,沿著y
軸2
個元素,沿著z
軸3
個元素。再來看一下我們使用meshgrid
方法生成三維網格的情況。
import numpy as np class Debug: def __init__(self): self.x = np.arange(1) self.y = np.arange(2) self.z = np.arange(3) def grid(self): X, Y, Z = np.meshgrid(self.x, self.y, self.z) return X, Y, Z main = Debug() X, Y, Z = main.grid() print("The X grid is:") print(X.shape) print("The Y grid is:") print(Y.shape) print("The Z grid is:") print(Z.shape) """ The X grid is: (2, 1, 3) The Y grid is: (2, 1, 3) The Z grid is: (2, 1, 3) """
我們可以看到,最終輸出的X,Y,Z
的shape
均為(2, 1, 3)
,這對應的是沿著x
軸3
個元素,沿著y
軸1
個元素,沿著z
軸2
個元素。突然感覺有些混亂,不符合我們之前想要得到的x,y,z
的排列順序,為了能夠得到正常的排列順序,我們可以使用如下代碼:
import numpy as np class Debug: def __init__(self): self.x = np.arange(1) self.y = np.arange(2) self.z = np.arange(3) def grid(self): X, Y, Z = np.meshgrid(self.y, self.z, self.x) return X, Y, Z main = Debug() X, Y, Z = main.grid() print("The X grid is:") print(X.shape) print("The Y grid is:") print(Y.shape) print("The Z grid is:") print(Z.shape) """ The X grid is: (3, 2, 1) The Y grid is: (3, 2, 1) The Z grid is: (3, 2, 1) """
可以看到運行后我們得到了符合Python
默認坐標軸習慣的網格形式,這時對應的x
軸向右側,y
軸向下,z
軸向屏幕里面。這個僅僅是為了理解需要,實際操作中無需進行這種坐標軸變換操作,直接使用默認的三維坐標軸方向即可。
關于“np.meshgrid中的indexing參數問題如何解決”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。