从2D矩阵获取坐标列表

时间:2014-05-16 13:11:55

标签: python numpy

假设我有一个10 x 20的值矩阵(所以200个数据点)

values = np.random.rand(10,20)

在坐标之间有一个已知的规则间距,以便x和y坐标由

定义
coord_x = np.arange(0,5,0.5)  --> gives [0.0,0.5,1.0,1.5...4.5]
coord_y = np.arange(0,5,0.25) --> gives [0.0,0.25,0.50,0.75...4.5]

我想得到一个代表每个坐标点的数组 数组的形状是(200,2),200是点的总数,额外的维度只是代表x和y,如

coord[0][0]=0.0, coord[0][1]=0.0
coord[1][0]=0.0, coord[1][1]=0.25
coord[2][0]=0.0, coord[2][1]=0.50
...
coord[19][0]=0.0, coord[19][1]=5.0
coord[20][0]=0.5, coord[20][1]=0.0
coord[21][0]=0.5, coord[21][1]=0.25
coord[22][0]=0.5, coord[22][1]=0.50
...
coord[199][0]=4.5, coord[199][1]=4.5

使用double for循环这是一件相当容易的事情,但我想知道是否有更优雅的解决方案使用内置的numpy(或其他)函数。

2 个答案:

答案 0 :(得分:2)

我认为meshgrid可能是您正在寻找的。

以下是一个示例,数据点数量较少:

>>> from numpy import fliplr, dstack, meshgrid, linspace
>>> x, y, nx, ny = 4.5, 4.5, 3, 10
>>> Xs = linspace(0, x, nx)
>>> Ys = linspace(0, y, ny)
>>> fliplr(dstack(meshgrid(Xs, Ys)).reshape(nx * ny, 2))

array([[ 0.  ,  0.  ],
       [ 0.  ,  2.25],
       [ 0.  ,  4.5 ],
       [ 0.5 ,  0.  ],
       [ 0.5 ,  2.25],
       [ 0.5 ,  4.5 ],
       [ 1.  ,  0.  ],
       [ 1.  ,  2.25],
       [ 1.  ,  4.5 ],
       [ 1.5 ,  0.  ],
       [ 1.5 ,  2.25],
       [ 1.5 ,  4.5 ],
       [ 2.  ,  0.  ],
       [ 2.  ,  2.25],
       [ 2.  ,  4.5 ],
       [ 2.5 ,  0.  ],
       [ 2.5 ,  2.25],
       [ 2.5 ,  4.5 ],
       [ 3.  ,  0.  ],
       [ 3.  ,  2.25],
       [ 3.  ,  4.5 ],
       [ 3.5 ,  0.  ],
       [ 3.5 ,  2.25],
       [ 3.5 ,  4.5 ],
       [ 4.  ,  0.  ],
       [ 4.  ,  2.25],
       [ 4.  ,  4.5 ],
       [ 4.5 ,  0.  ],
       [ 4.5 ,  2.25],
       [ 4.5 ,  4.5 ]])

答案 1 :(得分:1)

我认为你的问题意味着coord_y = np.arange(0,5,0.25)。你可以做到

from numpy import meshgrid,column_stack
x,y=meshgrid(coord_x,coord_y)
coord = column_stack((x.T.flatten(),y.T.flatten()))