有人可以关注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)
打印输出:
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是这样形成的? Ty:)
答案 0 :(得分:4)
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.]])
在plus和times等计算中使用时,两种形式的行为相同。那是因为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))
X
和Y
的值大于大多数用途实际需要的值。但通常使用它们而不是稀疏版本会有很多惩罚。
答案 1 :(得分:2)
由y
定义的线性间隔矢量linspace
和x
分别使用3和2点。
然后,网格网格函数使用这些线性间隔矢量来创建2D线性间隔点云。这将是每个y
和meshgrid
坐标的点网格。此点云的大小为3 x 2.
函数x
的输出会创建一个索引矩阵,在每个单元格中保存空间中每个点的y
和# 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
坐标。
创建如下:
x = xv_1[1,1] = 0.5
因此,例如位置(1,1)处的点具有坐标:
y = yv_1[1,1] = 1.0
.ui-autocomplete {
z-index: 99999; /* adjust this value */
}