關(guān)于np.meshgrid函數(shù)中的indexing參數(shù)問(wèn)題
meshgrid函數(shù)在二維空間中可以簡(jiǎn)單地理解為將x軸與y軸的每個(gè)位置的坐標(biāo)關(guān)聯(lián)起來(lái)形成了一個(gè)網(wǎng)格,我們知道空間中的點(diǎn)是由坐標(biāo)確定的,因此,當(dāng)x與y關(guān)聯(lián)起來(lái)后,我們便可以給與某個(gè)點(diǎn)某個(gè)特定值并畫(huà)出對(duì)應(yīng)的圖像。
具體的可以百度一下,會(huì)有很多較為詳細(xì)的介紹。
這里我想要著重的說(shuō)一下二維以及三維的meshgrid
的參數(shù)indexing
的問(wèn)題。
二維meshgrid函數(shù)
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]] """
從上面的結(jié)果可以看出,所獲取的網(wǎng)格對(duì)應(yīng)如下圖所示,橫向?yàn)?code>x軸,縱向?yàn)?code>y軸,類似于我們?cè)趲缀慰臻g中使用的坐標(biāo)系, 我們通常稱之為笛卡爾坐標(biāo)系(Cartesian coordinate)。
在二維meshgrid
網(wǎng)格創(chuàng)建命令中,笛卡爾坐標(biāo)系是默認(rèn)的坐標(biāo)系。
然而在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]] """
此時(shí)從上面的結(jié)果我們可以看出,所獲取的網(wǎng)格對(duì)應(yīng)如下圖所示,縱向?yàn)?code>i軸,橫向?yàn)?code>j軸,我們?cè)诰幊讨型ǔ:苌偈褂玫倪@種坐標(biāo)系。但是它也有自己的優(yōu)勢(shì),這里不進(jìn)一步說(shuō)明。
三維meshgrid函數(shù)
進(jìn)一步我們討論三維的情況,代碼如下:
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]]] """
由上面的結(jié)果我們可以看到,此時(shí)的坐標(biāo)軸對(duì)應(yīng)如下圖像:
x
軸向下,y
軸向屏幕內(nèi)側(cè),z
軸向右側(cè),在三維圖像中不再根據(jù)indexing
值來(lái)區(qū)分坐標(biāo)軸了,而是統(tǒng)一規(guī)定了坐標(biāo)軸的取法,只有對(duì)于這個(gè)坐標(biāo)軸的取法深入理解,才能在之后的三維數(shù)據(jù)處理中游刃有余。
特別說(shuō)明
但是這里有一個(gè)問(wèn)題,來(lái)看一組代碼:
class Debug: def __init__(self): x = np.array([[[0], [2]], [[4], [6]], [[8], [10]]]) print(x.shape) main = Debug() """ (3, 2, 1) """
我們可以看到,輸出結(jié)果為(3, 2, 1)
,即沿著x
軸1
個(gè)元素,沿著y
軸2
個(gè)元素,沿著z
軸3
個(gè)元素。
再來(lái)看一下我們使用meshgrid
方法生成三維網(wǎng)格的情況。
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)
,這對(duì)應(yīng)的是沿著x
軸3
個(gè)元素,沿著y
軸1
個(gè)元素,沿著z
軸2
個(gè)元素。
突然感覺(jué)有些混亂,不符合我們之前想要得到的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) """
可以看到運(yùn)行后我們得到了符合Python
默認(rèn)坐標(biāo)軸習(xí)慣的網(wǎng)格形式,這時(shí)對(duì)應(yīng)的x
軸向右側(cè),y
軸向下,z
軸向屏幕里面。
這個(gè)僅僅是為了理解需要,實(shí)際操作中無(wú)需進(jìn)行這種坐標(biāo)軸變換操作,直接使用默認(rèn)的三維坐標(biāo)軸方向即可。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python flask基于cookie和session來(lái)實(shí)現(xiàn)會(huì)話控制的實(shí)戰(zhàn)代碼
所謂的會(huì)話(session),就是客戶端瀏覽器和服務(wù)端網(wǎng)站之間一次完整的交互過(guò)程,本文介紹falsk通過(guò)cookie和session來(lái)控制http會(huì)話的全部解析,通常我們可以用cookie和session來(lái)保持用戶登錄等,感興趣的朋友一起看看吧2024-03-03python實(shí)現(xiàn)帶驗(yàn)證碼網(wǎng)站的自動(dòng)登陸實(shí)現(xiàn)代碼
本例所登錄的某網(wǎng)站需要提供用戶名,密碼和驗(yàn)證碼,在此使用了python的urllib2直接登錄網(wǎng)站并處理網(wǎng)站的Cookie2015-01-01python3實(shí)現(xiàn)字符串的全排列的方法(無(wú)重復(fù)字符)
這篇文章主要介紹了python3實(shí)現(xiàn)字符串的全排列的方法(無(wú)重復(fù)字符),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07一百行python代碼將圖片轉(zhuǎn)成字符畫(huà)
這篇文章主要為大家詳細(xì)介紹了一百行python代碼將圖片轉(zhuǎn)成字符畫(huà) ,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11python模擬實(shí)現(xiàn)分發(fā)撲克牌
這篇文章主要為大家詳細(xì)介紹了python模擬實(shí)現(xiàn)分發(fā)撲克牌,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04Python實(shí)現(xiàn)直方圖均衡基本原理解析
這篇文章主要介紹了Python實(shí)現(xiàn)直方圖均衡基本原理,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-08-08Python 整行讀取文本方法并去掉readlines換行\(zhòng)n操作
這篇文章主要介紹了Python 整行讀取文本方法并去掉readlines換行\(zhòng)n操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09python實(shí)現(xiàn)類的靜態(tài)變量用法實(shí)例
這篇文章主要介紹了python實(shí)現(xiàn)類的靜態(tài)變量用法,實(shí)例分析了Python中基于數(shù)組實(shí)現(xiàn)靜態(tài)隊(duì)列的相關(guān)使用技巧,需要的朋友可以參考下2015-05-05node命令行服務(wù)器(http-server)和跨域的實(shí)現(xiàn)
本文主要介紹了node命令行服務(wù)器(http-server)和跨域的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02