np.meshgrid中的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è)特定值并畫出對(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)軸方向即可。
到此這篇關(guān)于np.meshgrid中的indexing參數(shù)問(wèn)題解決的文章就介紹到這了,更多相關(guān)np.meshgrid的indexing參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python中hasattr()、getattr()、setattr()函數(shù)的使用
這篇文章主要介紹了python中hasattr()、getattr()、setattr()函數(shù)的使用方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08
python實(shí)現(xiàn)可逆簡(jiǎn)單的加密算法
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)可逆簡(jiǎn)單的加密算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03
使用Django實(shí)現(xiàn)把兩個(gè)模型類的數(shù)據(jù)聚合在一起
這篇文章主要介紹了使用Django實(shí)現(xiàn)把兩個(gè)模型類的數(shù)據(jù)聚合在一起,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
如何將yolo格式轉(zhuǎn)化為voc格式:txt轉(zhuǎn)xml(親測(cè)有效)
這篇文章主要介紹了如何將yolo格式轉(zhuǎn)化為voc格式:txt轉(zhuǎn)xml,親測(cè)有效,可以使用,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),感興趣的朋友參考下吧2023-12-12
Pytorch Tensor基本數(shù)學(xué)運(yùn)算詳解
今天小編就為大家分享一篇Pytorch Tensor基本數(shù)學(xué)運(yùn)算詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
使用Python爬蟲庫(kù)requests發(fā)送表單數(shù)據(jù)和JSON數(shù)據(jù)
今天再為大家介紹下使用Python爬蟲庫(kù)requests發(fā)送表單數(shù)據(jù)和JSON數(shù)據(jù)的方法,這是最基本的使用方法,大家可以參考測(cè)試下2020-01-01
Flask框架web開(kāi)發(fā)之零基礎(chǔ)入門
這篇文章主要介紹了Flask框架web開(kāi)發(fā)之零基礎(chǔ)入門,簡(jiǎn)單的介紹了如何使用及其數(shù)據(jù)庫(kù)集成,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12

