numpy.meshgrid解释

bor*_*ter 7 python numpy

有人可以关心这个meshgrid方法吗?我无法绕过它.该示例来自SciPy网站:

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)
Run Code Online (Sandbox Code Playgroud)

打印输出是:

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.]]
Run Code Online (Sandbox Code Playgroud)

为什么数组xv_1和yv_1是这样形成的?Ty :)

hpa*_*ulj 5

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.])
Run Code Online (Sandbox Code Playgroud)

使用解包更好地查看由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.]])
Run Code Online (Sandbox Code Playgroud)

和稀疏版本。请注意,它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.]])
Run Code Online (Sandbox Code Playgroud)

在加号和时间等计算中使用时,两种形式的行为相同。那是因为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. ]])
Run Code Online (Sandbox Code Playgroud)

这些形状也可能有帮助:

In [235]: X.shape, Y.shape
Out[235]: ((2, 3), (2, 3))
In [236]: X1.shape, Y1.shape
Out[236]: ((1, 3), (2, 1))
Run Code Online (Sandbox Code Playgroud)

XY具有比实际需要对大多数用户更多的价值。但通常使用它们代替稀疏版本不会有太大的损失。