Python学习笔记:np.ogrid、np.mgrid产生多维数组

np.ogridnp.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 用法

posted @ 2021-09-30 15:06  Hider1214  阅读(1151)  评论(0编辑  收藏  举报