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 用法