<p>受<a href="https://stackoverflow.com/a/38073913/3293881">^{<cd1>}</a>的启发并注重性能,您还可以使用<a href="http://docs.scipy.org/doc/numpy/reference/generated/numpy.meshgrid.html" rel="noreferrer">^{<cd2>}</a>-</p>
<pre><code>X2D,Y2D = np.meshgrid(Ypts,Xpts)
out = np.column_stack((Y2D.ravel(),X2D.ravel()))
</code></pre>
<p>样本运行-</p>
<pre><code>In [39]: Xpts=np.array([5, 10, 15, 20, 25, 30, 35])
...: Ypts=np.array([3, 6, 9])
...:
In [40]: X2D,Y2D = np.meshgrid(Ypts,Xpts)
In [41]: np.column_stack((Y2D.ravel(),X2D.ravel()))
Out[41]:
array([[ 5, 3],
[ 5, 6],
[ 5, 9],
......
[35, 6],
[35, 9]])
</code></pre>
<p><strong>运行时测试</strong></p>
<p>像往常一样,我列出了迄今为止为解决这个问题而列出的向量化方法的时间安排。因此,这里列出的方法归功于各自的作者</p>
<p>作为功能列出的方法:</p>
<pre><code>def itertools_based():
Ypts = np.arange(5, 480, 5)
Xpts = np.arange(5, 640, 5)
return np.array(list(itertools.product(Xpts, Ypts)))
def c__based():
py, px = np.mgrid[5:640:5,5:480:5]
return np.c_[py.ravel(), px.ravel()]
def meshgrid_based():
Ypts = np.arange(5, 480, 5)
Xpts = np.arange(5, 640, 5)
X2D,Y2D = np.meshgrid(Ypts,Xpts)
return np.column_stack((Y2D.ravel(),X2D.ravel()))
</code></pre>
<p>最后验证并计时:</p>
<pre><code>In [111]: %timeit itertools_based()
...: %timeit c__based()
...: %timeit meshgrid_based()
...:
100 loops, best of 3: 9.16 ms per loop
1000 loops, best of 3: 380 µs per loop
10000 loops, best of 3: 198 µs per loop
In [112]: np.allclose(itertools_based(),c__based())
Out[112]: True
In [113]: np.allclose(itertools_based(),meshgrid_based())
Out[113]: True
</code></pre>