【问题标题】:numpy.meshgrid explanationnumpy.meshgrid 解释
【发布时间】:2020-08-12 08:46:19
【问题描述】:

有人能解释一下meshgrid 方法吗?我无法绕开它。该示例来自 [SciPy][1] 站点:

import numpy as np

nx, ny = (3, 2)
x = np.linspace(0, 1, nx)
print ("x =", x)

y = np.linspace(0, 1, ny)
print ("y =", y)

xv, yv = np.meshgrid(x, y)
print ("xv_1 =", xv)
print ("yv_1 =", yv)


xv, yv = np.meshgrid(x, y, sparse=True)  # make sparse output arrays
print ("xv_2 =", xv)

print ("yv_2 =", yv)

打印输出是:

x = [ 0.   0.5  1. ]
y = [ 0.  1.]
xv_1 = [[ 0.   0.5  1. ]
 [ 0.   0.5  1. ]]
yv_1 = [[ 0.  0.  0.]
 [ 1.  1.  1.]]
xv_2 = [[ 0.   0.5  1. ]]
yv_2 = [[ 0.]
 [ 1.]]

为什么数组 xv_1 和 yv_1 是这样形成的?泰:) [1]:http://docs.scipy.org/doc/numpy/reference/generated/numpy.meshgrid.html#numpy.meshgrid

【问题讨论】:

    标签: python numpy


    【解决方案1】:
    In [214]: nx, ny = (3, 2)
    In [215]: x = np.linspace(0, 1, nx)
    In [216]: x
    Out[216]: array([ 0. ,  0.5,  1. ])
    In [217]: y = np.linspace(0, 1, ny)
    In [218]: y
    Out[218]: array([ 0.,  1.])
    

    使用解包更好地查看meshgrid产生的2个数组:

    In [225]: X,Y = np.meshgrid(x, y)
    In [226]: X
    Out[226]: 
    array([[ 0. ,  0.5,  1. ],
           [ 0. ,  0.5,  1. ]])
    In [227]: Y
    Out[227]: 
    array([[ 0.,  0.,  0.],
           [ 1.,  1.,  1.]])
    

    对于稀疏版本。请注意,X1 看起来像一排 X(但为 2d)。和Y1 就像一列Y

    In [228]: X1,Y1 = np.meshgrid(x, y, sparse=True)
    In [229]: X1
    Out[229]: array([[ 0. ,  0.5,  1. ]])
    In [230]: Y1
    Out[230]: 
    array([[ 0.],
           [ 1.]])
    

    当用于加号和时间等计算时,两种形式的行为相同。那是因为numpy's 广播。

    In [231]: X+Y
    Out[231]: 
    array([[ 0. ,  0.5,  1. ],
           [ 1. ,  1.5,  2. ]])
    In [232]: X1+Y1
    Out[232]: 
    array([[ 0. ,  0.5,  1. ],
           [ 1. ,  1.5,  2. ]])
    

    形状也可能有帮助:

    In [235]: X.shape, Y.shape
    Out[235]: ((2, 3), (2, 3))
    In [236]: X1.shape, Y1.shape
    Out[236]: ((1, 3), (2, 1))
    

    XY 的值比大多数用途实际需要的值多。但通常使用它们而不是稀疏版本并没有太多的惩罚。

    【讨论】:

      【解决方案2】:

      linspace 定义的线性间隔向量 xy 分别使用 3 点和 2 点。

      这些线性间隔矢量随后被 meshgrid 函数用于创建 2D 线性间隔点云。这将是每个xy 坐标的点网格。该点云的大小为 3 x 2。

      函数meshgrid 的输出创建一个索引矩阵,该矩阵在每个单元格中保存空间每个点的xy 坐标。

      创建如下:

      # dummy
      def meshgrid_custom(x,y):
      xv = np.zeros((len(x),len(y)))
      yv = np.zeros((len(x),len(y)))
      
      for i,ix in zip(range(len(x)),x):
          for j,jy in zip(range(len(y)),y):
              xv[i,j] = ix
              yv[i,j] = jy
      
      return xv.T, yv.T
      

      因此,例如位置 (1,1) 处的点具有坐标:

      x = xv_1[1,1] = 0.5
      y = yv_1[1,1] = 1.0

      【讨论】:

      • 返回的矩阵让我很头疼,它是什么样子的?这两个向量是如何形成的?当您说 3x2 时,它意味着 3 行 * 2 列还是我遗漏了什么?
      猜你喜欢
      • 2021-04-09
      • 2022-10-13
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      • 2012-11-12
      • 2012-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多