我想创建一个 2D numpy 数组,我想在其中存储像素的坐标,使 numpy 数组看起来像这样
[(0, 0), (0, 1), (0, 2), ...., (0, 510), (0, 511)
(1, 0), (1, 1), (1, 2), ...., (1, 510), (1, 511)
..
..
..
(511, 0), (511, 1), (511, 2), ...., (511, 510), (511, 511)]
这是一个荒谬的问题,但我还没有找到任何东西。
最佳答案
可以用 np.indices
或 np.meshgrid
更高级的索引:
>>> data=np.indices((512,512)).swapaxes(0,2).swapaxes(0,1)
>>> data.shape
(512, 512, 2)
>>> data[5,0]
array([5, 0])
>>> data[5,25]
array([ 5, 25])
这可能看起来很奇怪,因为它确实是为了做这样的事情:
>>> a=np.ones((3,3))
>>> ind=np.indices((2,1))
>>> a[ind[0],ind[1]]=0
>>> a
array([[ 0., 1., 1.],
[ 0., 1., 1.],
[ 1., 1., 1.]])
一个
mgrid
例子:np.mgrid[0:512,0:512].swapaxes(0,2).swapaxes(0,1)
网格示例:
>>> a=np.arange(0,512)
>>> x,y=np.meshgrid(a,a)
>>> ind=np.dstack((y,x))
>>> ind.shape
(512, 512, 2)
>>> ind[5,0]
array([5, 0])
所有这些都是等效的方法;然而,
meshgrid
可用于创建非均匀网格。如果您不介意切换行/列索引,您可以删除最后的
swapaxes(0,1)
.
关于numpy - 创建元素在范围内的二维 numpy 数组的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18359671/