我想创建一个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)]
Run Code Online (Sandbox Code Playgroud)
这是一个荒谬的问题,但我找不到任何东西.
Dan*_*iel 10
可以使用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])
Run Code Online (Sandbox Code Playgroud)
这可能看起来很奇怪,因为它真的做了这样的事情:
>>> 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.]])
Run Code Online (Sandbox Code Playgroud)
一个mgrid
例子:
np.mgrid[0:512,0:512].swapaxes(0,2).swapaxes(0,1)
Run Code Online (Sandbox Code Playgroud)
一个meshgrid示例:
>>> 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])
Run Code Online (Sandbox Code Playgroud)
所有这些都是相同的方式; 但是,meshgrid
可用于创建非均匀网格.
如果你不介意切换行/列索引,你可以放弃最后的swapaxes(0,1)
.