在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
答案 0 :(得分:2)
您只需跳过meshgrid
和x
中的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)