numpy:如何创建一个类似网格的数组?

cqc*_*991 5 python numpy

我想创建一个表示XY面板的数组(-50、50)。即: [[-50, -50], [-49,-50],[-48,-50]....[50,50]],长度为101 * 101。

显然,我可以通过生成double loop from (-50,50)。我想知道prefered这样做的方式吗?

zha*_*hen 6

numpy.meshgrid显然是我最清楚的方式(如@benbo提到),你还需要一个步骤ravelflatten二维栅格阵列:

In [131]: import numpy as np
     ...: x=np.linspace(-2, 2, 5)
     ...: y=np.linspace(-2, 2, 5)
     ...: xx,yy=np.meshgrid(x,y)
     ...: coords=np.array((xx.ravel(), yy.ravel())).T

In [132]: coords
Out[132]: 
array([[-2., -2.],
       [-1., -2.],
       [ 0., -2.],
       [ 1., -2.],
       [ 2., -2.],
       [-2., -1.],
       ......
       [ 1.,  2.],
       [ 2.,  2.]])

In [133]:
Run Code Online (Sandbox Code Playgroud)

或者正如@John 提到的,缩短您的代码np.c_以跳过转置:

coords=np.c_[xx.ravel(), yy.ravel()]
Run Code Online (Sandbox Code Playgroud)

基准:

In [156]: %timeit coords=np.array((xx.ravel(), yy.ravel())).T
100000 loops, best of 3: 14.6 µs per loop

In [157]: %timeit coords=np.c_[xx.ravel(), yy.ravel()] #not as efficient as ?
10000 loops, best of 3: 47.6 µs per loop
Run Code Online (Sandbox Code Playgroud)