np.ogrid
和 np.mgrid
函數相似,都是返回一個多維的 meshgrid
, 區別是 ogrid 返回開放式,mgrid 返回密集式數組。
而數組中的元素依據 arange
方法來產生。
- 參數部分需要傳入一個列表,例如:[a, b, step] ( a 表示起點,b 表示終點,step 表示步長,步長參數缺省默認為1)
一、ogrid函數
np.ogrid
函數作為產生 numpy 數組與 arange 函數有點類似,不同的是:
- arange 產生一維數組,ogrid 產生二維數組
- arange 產生一個數組,ogrid 產生兩個數組
- ogrid 產生的數組,第一個數組是縱向產生的,即數組第二維大小始終是1。第二個數組是橫向產生的,即數組的第一維大小始終是1。
1.整數步長
整數步長直接生成2個數組。
x, y = np.ogrid[0:10:1, 0:10:2] # 步長分別為1、2
print(x)
print(y)
'''
[[0]
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]] (10, 1)
[[0 2 4 6 8]] (1, 5)
'''
2.復數步長
復數步長的設置是通過 j 進行設置的,如:5j,表示的是,用幾個數值來等分整個區間。
x, y = np.ogrid[0:10:6j, 0:10:4j]
print(x, np.shape(x))
print(y, np.shape(y))
'''
[[ 0.]
[ 2.]
[ 4.]
[ 6.]
[ 8.]
[10.]] (6, 1)
[[ 0. 3.33333333 6.66666667 10. ]] (1, 4)
'''
二、mgrid函數
np.mgrid
函數最終返回兩個數組,維度都是 n * m
, 生成的第一個數組是依照列表中第一個元素生成,對列進行擴展重復;另外一個數組是根據列表中第二個元素生成,對行進行擴展重復。
np.mgrid[1:20:5, 0:8:1]
'''
array([[[ 1, 1, 1, 1, 1, 1, 1, 1],
[ 6, 6, 6, 6, 6, 6, 6, 6],
[11, 11, 11, 11, 11, 11, 11, 11],
[16, 16, 16, 16, 16, 16, 16, 16]],
[[ 0, 1, 2, 3, 4, 5, 6, 7],
[ 0, 1, 2, 3, 4, 5, 6, 7],
[ 0, 1, 2, 3, 4, 5, 6, 7],
[ 0, 1, 2, 3, 4, 5, 6, 7]]])
'''
應用對比
x, y = np.ogrid[:3, :4]
np.where(x < y, x, y+10)
'''
array([[10, 0, 0, 0],
[10, 11, 1, 1],
[10, 11, 12, 2]])
'''
參考鏈接:numpy的ogrid詳細介紹
參考鏈接:np.ogrid 用法