meshgrid
np.meshgrid()
np.meshgrid
從坐標(biāo)向量返回坐標(biāo)矩陣辆苔。
這樣說可能很抽象述吸。舉個(gè)例子忿族。
x = np.arange(-2,2)
y = np.arange(0,3)#生成一位數(shù)組,其實(shí)也就是向量
x
Out[31]: array([-2, -1, 0, 1])
y
Out[32]: array([0, 1, 2])
z,s = np.meshgrid(x,y)#將兩個(gè)一維數(shù)組變?yōu)槎S矩陣
z
Out[36]:
array([[-2, -1, 0, 1],
[-2, -1, 0, 1],
[-2, -1, 0, 1]])
s
Out[37]:
array([[0, 0, 0, 0],
[1, 1, 1, 1],
[2, 2, 2, 2]])
從代碼上看蝌矛,我們得到了這樣一組值:
-2道批, -1, 0入撒, 1隆豹,---- 0, 0茅逮, 0璃赡, 0
-2, -1献雅, 0碉考, 1,---- 1挺身, 1豆励, 1, 1
也就是說瞒渠,它將 x 變成了矩陣 z 的行向量,y 變成了矩陣 s 的列向量技扼。
反過來伍玖,也是一樣的:
z,s = np.meshgrid(y,x)
z
Out[40]:
array([[0, 1, 2],
[0, 1, 2],
[0, 1, 2],
[0, 1, 2]])
s
Out[41]:
array([[-2, -2, -2],
[-1, -1, -1],
[ 0, 0, 0],
[ 1, 1, 1]])
以上面這個(gè)例子來說,z 和 s 就構(gòu)成了一個(gè)坐標(biāo)矩陣剿吻,實(shí)際上也就是一個(gè)網(wǎng)格窍箍,不知道你沒有注意到,z 和 s 的維數(shù)是一樣的丽旅,是一個(gè)4 × 4的網(wǎng)格矩陣椰棘,也就是坐標(biāo)矩陣。
meshgrid
方法的參數(shù)數(shù)量不受限榄笙,可以得到任意 N 維空間中的坐標(biāo)矩陣邪狞。
注意到,傳入的對(duì)象是一維的茅撞。
想到這里帆卓,我覺得巨朦,這可能和方程式有關(guān)系(很可能我的感覺是錯(cuò)的,等以后發(fā)現(xiàn)再改這句話剑令,但是我覺得這樣的話糊啡,會(huì)很好理解這個(gè)函數(shù)方法),也就是行列式吁津,但是方程式的右側(cè)的 y 只有一列棚蓄。
a1x1 + b1x2 + c1x3 + d1x4 + ...... =y1
a2x1 + b2x2 + c2x3 + d2x4 + ...... =y2
...
...
x, y = np.meshgrid(np.arange(-1, 1, 0.01), np.arange(-1, 1, 0.01))
contor = np.sqrt(x ** 2 + y ** 2)
plt.imshow(contor)
plt.colorbar()
plt.show()
np.where()
where(condition, [x, y])
當(dāng)condition為True時(shí),返回 x 碍脏, 否則返回 y梭依。
其實(shí),在x, y 為一維數(shù)組時(shí)潮酒,就相當(dāng)于:
[xv if c else yv for (c,xv,yv) in zip(condition,x,y)]
測試:
In [3]: x = np.arange(9).reshape(3,3)#創(chuàng)建一個(gè)3×3的矩陣
In [4]: x
Out[4]:
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
In [5]: np.where(x>4) #只輸入condition
Out[5]: (array([1, 2, 2, 2], dtype=int64), array([2, 0, 1, 2], dtype=int64))
In [6]: np.where(x>7)# 只輸入condition
Out[6]: (array([2], dtype=int64), array([2], dtype=int64))
通過上面的例子睛挚,我們可以發(fā)現(xiàn),只輸入condition的話急黎,得到的結(jié)果是一個(gè)位置索引扎狱。它們就是滿足條件的元素的索引,即為True的元素勃教。
說明下:返回的第一個(gè)第一個(gè)數(shù)組為行坐標(biāo)淤击,第二個(gè)為縱坐標(biāo)。
我們還可以用where來這樣做:
In [8]: y = np.random.randn(3,3)
In [9]: y
Out[9]:
array([[ 1.59809956, -0.42735851, 1.46593089],
[-0.26497622, 0.53948157, -2.01569974],
[-0.11099139, -1.70616601, -1.34821361]])
In [10]: np.where(y > 0, 4, -4)
Out[10]:
array([[ 4, -4, 4],
[-4, 4, -4],
[-4, -4, -4]])
很顯然故源,np.where()
是可以嵌套使用的污抬,其類似于if..elif...else...,如果我們有多個(gè)條件的話绳军。
大家都知道印机,布爾值在計(jì)算過程中是可以當(dāng)做0和1處理的。
因此门驾,我們還可以這樣:
result = 3 * (con2 & -cond1) + 2 * - (cond1 | cond2)