行是网格网格点的坐标的矩阵

时间:2018-11-22 08:47:44

标签: python arrays numpy mesh

this tutorial中,我发现类似的代码

import numpy as np
x = np.linspace(-5, 5, 20)
y = np.linspace(-1, 1, 10)
Y, X = np.meshgrid(y, x) 
xy = np.vstack([X.ravel(), Y.ravel()]).T
print(xy)

与使用meshgrid + vstack + ravel + {{1}相比,没有一种更短的方法可以得到矩阵,其中行是网格网格的点的坐标。 }}?

输出:

transpose

3 个答案:

答案 0 :(得分:2)

您只需跳过meshgridx中的cartesian product,就可以跳过y并直接获得想要的东西:

from itertools import product
import numpy as np

x = np.linspace(-5, 5, 20)
y = np.linspace(-1, 1, 10)
xy = np.array(list(product(x,y)))
print(xy)

输出:

[[-5.         -1.        ]
 [-5.         -0.77777778]
 [-5.         -0.55555556]
 [-5.         -0.33333333]
 [-5.         -0.11111111]
 [-5.          0.11111111]
 [-5.          0.33333333]
 [-5.          0.55555556]
 [-5.          0.77777778]
 [-5.          1.        ]
 [-4.47368421 -1.        ]
 [-4.47368421 -0.77777778]
 [-4.47368421 -0.55555556]
 [-4.47368421 -0.33333333]
...
]

答案 1 :(得分:1)

这是重复和平铺方法的实现。

import numpy as np

x = np.linspace(-5, 5, 20)
y = np.linspace(-1, 1, 10)
xy = np.empty((len(x) * len(y), 2))
xy[:, 0] = np.repeat(x, len(y))
xy[:, 1] = np.tile(y, len(x))
print(xy)

我想meshgrid方法使用相同的方法来填充结果矩阵。

答案 2 :(得分:1)

这是一个使用 meshgrid 的单行:

import numpy as np

x = np.linspace(-5, 5, 20)
y = np.linspace(-1, 1, 10)
xy = np.dstack(np.meshgrid(x, y, indexing='ij')).reshape(-1, 2)
print(xy)